这很简单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
解释:
模运算符是这里的关键,我们希望在每四行之后拆分输入行:
$ awk '{print NR%4,$0}' file
1 111
2 222
3 333
0 444
1 555
2 666
3 777
0 888
每四分之一的四的模数(余数) 当然为零,所以我们使用这个事实来增加文件计数器。!(NR%4)
是NR%4==0
as zero 的简写,评估为 false 并且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