Devo dividere un .txt
file in quelli più piccoli contenenti 100 righe ciascuno, inclusa l'intestazione. Non so se questo è rilevante, ma il file originale è delimitato in questo modo:
COLUMN1 | COLUMN2 | COLUMN3
1 | 2 | 3
4 | 5 | 6
7 | 8 | 9
Ho bisogno che ogni file generato da questa divisione abbia la riga di intestazione. Inoltre, devono essere generati/spostati in un'altra directory e seguire uno schema di nomi, come file_01.txt
, file_02.txt
, ecc
Risposta accettata:
Con gnu split
potresti salvare l'intestazione in una variabile, quindi split
a partire dalla 2a riga, utilizzando il --filter
opzione per scrivere prima l'intestazione e poi le 99 righe per ogni pezzo e specificare anche la directory di output (ad es. 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_
questo creerà pezzi di 100 righe come
path to/output dir/file_01.txt
path to/output dir/file_02.txt
path to/output dir/file_03.txt
..............................