通过多行交替将文件拆分为子文件

时间:2018-04-04 11:18:09

标签: bash awk split line

我想将多行输入文件(file)拆分为两个输出文件(out1out2),以便将每个n行保存到其中一个输出文件是交替出现的。

例如,如果n=2file总共有六行,则file的前两行会保存到out1,后两行会被保存到out2,最后两行再次保存到out1

$ cat file
foo
foo
bar
bar
baz
baz

$ cat file | sought_command out1 out2  # n=2
$ cat out1
foo
foo
baz
baz
$ cat out2
bar
bar

我相信这可以通过 awk 来完成,我会很感激指示如何启动。

修改1 : 我知道问题可以简化为只打印n行,然后不打印下一行n行,然后无限制地打印n行,因为循环遍历行。再加上设置一个偏差,从哪条线开始足以解决问题。

我了解我可以通过awk 'NR%3==1' file打印每个第三行行,但如何打印每个三个行?

3 个答案:

答案 0 :(得分:1)

沿着这些方向的东西,输入从1到100的数字:

seq 1 100 | awk -v n=4 'BEGIN{f=1} { if((NR-1)%n==0){f=1-f}; print > "out" f}'

答案 1 :(得分:1)

可以做到这一点

awk -vn="2" '!((NR-1)%n){file=file=="file1"?"file2":"file1"}{print > file}' file

根据三元组每n行切换一次文件名,并将每一行打印到指定的文件名。

答案 2 :(得分:0)

$ awk '(NR%2)==1{out = "out" ((c++)%2)+1 } {print " > " out}' file
foo > out1
foo > out1
bar > out2
bar > out2
baz > out1
baz > out1

只需将" > "更改为>即可实际生成输出文件。