pipe à scinder, utilisez gunzip -c ou zcat pour ouvrir le fichier
gunzip -c bigfile.gz | split -l 400000
Ajoutez des spécifications de sortie à la commande split.
La meilleure façon de procéder dépend de ce que vous voulez :
- Voulez-vous extraire une seule partie du gros fichier ?
- Ou voulez-vous créer toutes les pièces en une seule fois ?
Si vous voulez une partie unique du fichier , votre idée d'utiliser gunzip
et head
est correct. Vous pouvez utiliser :
gunzip -c hugefile.txt.gz | head -n 4000000
Cela produirait les 4000000 premières lignes sur la sortie standard - vous voudrez probablement ajouter un autre tube pour faire quelque chose avec les données.
Pour obtenir les autres parties, vous utiliseriez une combinaison de head
et tail
, comme :
gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000
pour obtenir le deuxième bloc.
Est-ce que faire une série de ces solutions est peut-être une solution ou le gunzip -cre aurait-il besoin de suffisamment d'espace pour que le fichier entier soit décompressé
Non, le gunzip -c
ne nécessite aucun espace disque - il fait tout en mémoire, puis le diffuse vers stdout.
Si vous souhaitez créer toutes les pièces en une seule fois , il est plus efficace de tous les créer avec une seule commande, car le fichier d'entrée n'est alors lu qu'une seule fois. Une bonne solution consiste à utiliser split
; voir la réponse de jim mcnamara pour plus de détails.
Comme vous travaillez sur un flux (non rembobinable), vous voudrez utiliser la forme '+N' de queue pour obtenir des lignes à partir de la ligne N.
zcat hugefile.txt.gz | head -n 40000000
zcat hugefile.txt.gz | tail -n +40000001 | head -n 40000000
zcat hugefile.txt.gz | tail -n +80000001 | head -n 40000000