获取文本文件中特定字符之间的字符串块;bash“;
有人能帮我找到复制字符串“X 0”(X=H,He…)和最近的“**”之间所有字符串的代码吗?我使用bash进行编程获取文本文件中特定字符之间的字符串块;bash“;,bash,awk,sed,grep,Bash,Awk,Sed,Grep,有人能帮我找到复制字符串“X 0”(X=H,He…)和最近的“**”之间所有字符串的代码吗?我使用bash进行编程 H 0 S 3 1.00 0.000000000000 0.1873113696D+02 0.3349460434D 01 0.2825394365D+01 0.2347269535D+00 0.6401216923D+00 0.8137573261D+00 S 1 1.00 0.000000000000
H 0
S 3 1.00 0.000000000000
0.1873113696D+02 0.3349460434D 01
0.2825394365D+01 0.2347269535D+00
0.6401216923D+00 0.8137573261D+00
S 1 1.00 0.000000000000
0.1612777588D+00 0.1000000000D+01
****
He 0
S 3 1.00 0.000000000000
0.3842163400D+02 0.4013973935D 01
0.5778030000D+01 0.2612460970D+00
0.1241774000D+01 0.7931846246D+00
S 1 1.00 0.000000000000
0.2979640000D+00 0.1000000000D+01
****
我想为所有的“x0”(X=H,He…)做这件事,特别是为所有的“x0”获得这样一个孤立的文本:
及
因此,我想我必须找到一种方法,使用包含“x0”的字符串来实现它。
我试图使用
grep-A2000'h0'filename.txt | grep-B2000-m8'***'filename.txt>>filenameH.txt
,但它对于X的其他示例并不那么有用,只是第一个示例。使用awk
:
awk '/^[^ ]+ 0$/{p=1;++c}/^\*\*\*\*$/{print >>FILENAME c;p=0}p{print >> FILENAME c}' file
脚本创建的文件数量与模式
/^[^]+0$/
和/^\*\*\**$/
匹配的块数量相同。如果记录以4星分隔,则文件索引从1开始。。需要gawk
$ awk -v RS='\\*\\*\\*\\*\n' '$1~/^He?$/{printf "%s", $0 RT > FILENAME $1}' file
这将只提取
H
和He
记录。如果不想限制,只需在大括号之前删除条件。(相当于$1==“H”|$1==“He”
)欢迎来到SO,请在您的帖子中发布更有意义的输入和输出示例。和
awk '/^[^ ]+ 0$/{p=1;++c}/^\*\*\*\*$/{print >>FILENAME c;p=0}p{print >> FILENAME c}' file
$ awk -v RS='\\*\\*\\*\\*\n' '$1~/^He?$/{printf "%s", $0 RT > FILENAME $1}' file