[英]Splitting multiple files together
我有70个看起来像的文件(file1 = complex.1.txt; ... file69 = complex.69.txt ... file70 = complex.70.txt)
ATOM 7066 O GLY A 784 49.130 43.743 -23.586 1.00 1.00 O
nnn
CONECT 337 403
END
ATOM 1 N ARG B 1 26.564 -17.621 9.457 1.00 1.00 N1+
ATOM 2 CA ARG B 1 26.733 -18.764 8.526 1.00 1.00 C
我想将所有70个文件分成两个部分。 第二个文件将在END之后开始。 对于所有文件,分割后的文件名将分别为complex.1.txt_part1和complex.1.txt_part2,依此类推。 我尝试了awk解决方案
for ((i=1;i<=70;i++)); do awk '{file="complex.1.txt_part"++k;printf "%s%s",$0,RS > file;close(file)}' RS='END\n' complex.$i.txt; done
但结果只有2个文件。 有人可以纠正这个问题还是发布其他不错的解决方案。
gawk具有FILENAME
内置变量,可能对您的需求有用。 此一线工作:
awk 'FNR==1{f=0}{print > FILENAME (f?"_part2":"_part1")}/END/{f=1}' complext.*.txt
这是一个Perl一线解决方案:
perl -n0e '$k=1; for (split /(?<=^END\n)/m) { open $fh, ">complex.$..txt_part".$k++; print $fh $_ }' complex.*.txt
它使用以下两个特殊的命令行选项:
-n
-0
然后在单行代码本身中:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.