GNU/Linux >> Tutoriels Linux >  >> Linux

unix - divise un énorme fichier .gz par ligne

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

Linux
  1. Comment diviser et combiner des fichiers à partir de la ligne de commande sous Linux

  2. Commande unix rapide pour afficher des lignes spécifiques au milieu d'un fichier ?

  3. unix - début ET fin du fichier

  4. Comment obtenir les n premiers caractères de chaque ligne dans le fichier de données Unix

  5. Convertir les fins de ligne Unix en Windows

Comment diviser un gros fichier en parties à des numéros de ligne donnés

Comment convertir un fichier Windows en un fichier UNIX

Commande AWK sous Linux/Unix

Tutoriel Unix Sed :Impression de lignes de fichier à l'aide d'adresses et de modèles

Tutoriel Unix Sed :ajouter, insérer, remplacer et compter les lignes de fichiers

Tutoriel Unix Sed :Opération de fichiers multilignes avec 6 exemples pratiques