我正在尝试使用bash脚本进行后期处理。其中一个步骤是从文件某行下面的行复制到另一个文件。例如,我的文件result.txt看起来像这样
6798
Atoms. Timestep: 0
1 -1.13977 -2.85824 -1.22655
1 -1.20925 -3.25439 -0.978641
1 -1.54565 -2.93301 -1.10555
1 -0.736167 -2.71201 -1.28063
1 -0.807178 -3.16856 -1.13489
1 -0.44354 -3.03183 -1.23103
1 -0.357782 -3.39866 -1.0277
1 -0.0431648 -3.05734 -1.23315
6798
Atoms. Timestep: 1
1 0.119814 -3.40483 -1.03653
1 0.382198 -3.03771 -1.23183
1 0.580509 -3.37434 -1.02215
1 0.818628 -3.00063 -1.21422
1 1.0244 -3.31469 -0.980957
1 1.27482 -2.97232 -1.15564
我只想要Atoms. Timestep: 1
以下的部分。这很容易手动完成,但是,有成千上万的文件,所以我想使用bash脚本为我做。我已经检查了谷歌的几种方法,但它们不适合我的问题。如果您有经验,最好在下面发布您的结果。这可能有助于像我这样有类似问题的其他人。
提前谢谢!
最终解决方案
我的最终解决方案就像下面提到的那样,我得出结论。
sed -n '/Atoms. Timestep: 1/, $ p' < result.txt > resultParsed.txt
sed -i '/Atoms. Timestep: 1/d' resultParsed.txt
第一行将获取Atoms之后和之后的内容。时间步长:1。第二行将删除您不需要的行。
答案 0 :(得分:2)
这将从 result.txt 复制,从第一个匹配项复制到文件结尾,并保存在 resultParsed.txt 中:
sed -n '/Atoms. Timestep: 1/, $ p' < result.txt > resultParsed.txt
这将从 result.txt 中复制,从第一个匹配项和后面的6个条目中复制并保存在 resultParsed.txt 中:
sed -n '/Atoms. Timestep: 1/ , +6 p' < result.txt > resultParsed.txt
环境:GNU sed版本4.1.5
答案 1 :(得分:1)
使用awk
awk 'x+=/Atoms\. Timestep: 1/' file >newfile
当找到该字符串时增加x,x大于零,这被视为真,而awk的默认操作是打印。所以包括和在此之后的所有行都被打印出来。