GNU/Linux >> Tutoriels Linux >  >> Linux

Diviser le fichier par nombre de lignes, y compris l'en-tête dans chacune ?

J'ai besoin de diviser un .txt fichier en plus petits contenant 100 lignes chacun, y compris l'en-tête. Je ne sais pas si c'est pertinent, mais le fichier original est délimité comme ceci :

COLUMN1 | COLUMN2 | COLUMN3
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9

J'ai besoin que chaque fichier généré à partir de cette division ait la ligne d'en-tête. De plus, ils doivent être générés/déplacés dans un autre répertoire et suivre un modèle de nom, comme file_01.txt , file_02.txt , etc

Réponse acceptée :

Avec gnu split vous pouvez enregistrer l'en-tête dans une variable puis split à partir de la 2ème ligne, en utilisant le --filter possibilité d'écrire d'abord l'en-tête, puis les 99 lignes pour chaque élément et de spécifier également le répertoire de sortie (par exemple, path to/output dir/ ):

header=$(head -n 1 infile.txt)
export header
tail -n +2 infile.txt | split -l 99 -d --additional-suffix=.txt 
--filter='{ printf %s\n "$header"; cat; } >path to/output dir/$FILE' - file_

cela créera des morceaux de 100 lignes comme

path to/output dir/file_01.txt
path to/output dir/file_02.txt
path to/output dir/file_03.txt
..............................

Linux
  1. Supprimer tous les fichiers/répertoires sauf un fichier ?

  2. Comment imprimer les lignes numéro 15 et 25 sur 50 lignes ?

  3. Comment compter le nombre de lignes dans un fichier après une correspondance Grep ?

  4. Écrire dans le fichier .txt ?

  5. Comment obtenir uniquement le nombre de lignes d'un fichier

Comment joindre plusieurs lignes en une seule dans un fichier sous Linux

5 façons de compter le nombre de lignes dans un fichier

Ajouter un en-tête à un fichier délimité par des tabulations

Une commande pour créer un répertoire et un fichier à l'intérieur de celui-ci commande linux

Comment diviser un fichier texte en plusieurs fichiers *.txt ?

Liste des lignes d'un seul fichier dans DIFF