[英]Splitting file into subfiles by multi-line alternation
我想将多行输入文件( 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
,但如何打印每三条线?
遵循这些原则,输入1到100之间的数字:
seq 1 100 | awk -v n=4 'BEGIN{f=1} { if((NR-1)%n==0){f=1-f}; print > "out" f}'
可以做到这一点
awk -vn="2" '!((NR-1)%n){file=file=="file1"?"file2":"file1"}{print > file}' file
只需根据三进制每n行切换文件名,并将每行打印到指定的文件名。
$ awk '(NR%2)==1{out = "out" ((c++)%2)+1 } {print " > " out}' file
foo > out1
foo > out1
bar > out2
bar > out2
baz > out1
baz > out1
只需将" > "
更改为>
即可实际生成输出文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.