繁体   English   中英

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

[英]Splitting file into subfiles by multi-line alternation

我想将多行输入文件( file )分成两个输出文件( out1out2 ),这样每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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM