web-dev-qa-db-ja.com

各行のヘッダーを含む行数でファイルを分割する

.txtファイルを、ヘッダーを含めて100行ずつ含む小さなファイルに分割する必要があります。これが適切かどうかはわかりませんが、元のファイルは次のように区切られています。

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

この分割から生成されたすべてのファイルにヘッダー行が必要です。また、別のディレクトリに生成/移動し、file_01.txtfile_02.txtなどの名前パターンに従う必要があります。

6
Geralt

gnu splitヘッダーを変数に保存してから、splitを2行目から--filterオプションを使用して、最初にヘッダーを書き込み、次に各ピースの99行を書き込み、出力ディレクトリも指定します(例: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_

これにより、100行のピースが作成されます

path to/output dir/file_01.txt
path to/output dir/file_02.txt
path to/output dir/file_03.txt
..............................
5
don_crissti
awk 'NR==1        {a=$0}
    (NR-1)%100==0 {print a > "d/file_" int(1+(NR-1)/100)}
                  {print   > "d/file_" int(1+(NR-1)/100)}' 
5
JJoao

バッシュで私のために働く:

lines=100; { read header && sed "1~$((${lines}-1)) s/^/${header}\n/g" | split -l $lines --numeric-suffixes=1 --additional-suffix=.txt - file_ ; } < inputfile.txt
3