これはawk
tryで簡単awk '{print $0 > ("output"i+1".csv")}!(NR%4){i++}' file
です。
デモ:
$ ls
file
$ cat file
111
222
333
444
555
666
777
888
$ awk '{print $0 > ("output"i+1".csv")}!(NR%4){i++}' file
$ ls
file output1.csv output2.csv
$ cat output1.csv
111
222
333
444
$ cat output2.csv
555
666
777
888
説明:
ここでモジュラス演算子が重要です。入力行を 4 行ごとに分割します。
$ awk '{print NR%4,$0}' file
1 111
2 222
3 333
0 444
1 555
2 666
3 777
0 888
4のモジュラス(剰余) は 4 ごとにゼロなので、この事実を使用してファイル カウンターをインクリメントします。as zero は false と評価され!(NR%4)
、ブロックを実行したい場合はゼロなので、マイナスにします。NR%4==0
NR%4
{i++}
$ awk '{print NR%4,$0,"output"i+1".csv"}!(NR%4){i++}' file
1 111 output1.csv
2 222 output1.csv
3 333 output1.csv
0 444 output1.csv
1 555 output2.csv
2 666 output2.csv
3 777 output2.csv
0 888 output2.csv