我想将多行输入文件(file
)拆分为两个输出文件(out1
,out2
),以便将每个n
行保存到其中一个输出文件是交替出现的。
例如,如果n=2
和file
总共有六行,则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
打印每个第三行行,但如何打印每个三个行?
答案 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
只需将" > "
更改为>
即可实际生成输出文件。