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
..............................