我有一个文件,其中有几行包含字母数字字符串,例如 ZINC123345667_123,后跟其他行。现在,我需要仅删除字符串包含“ZINC”的行中分隔符“_”后面的数字,其余其他行保持不变。我尝试使用下面的 awk 命令,但只获得了带有“ZINC”的行,而不是其他行。
我的原始数据:
Name: ZINC00000036_1
Grid Score: -23.170839
Grid_vdw: -22.304409
Grid_es: -0.866430
Int_energy: 4.932559
@<TRIPOS>MOLECULE
ZINC00000036_1
18 18 1 0 0
Name: ZINC00000053_3
Grid Score: -23.739523
Grid_vdw: -22.876204
Grid_es: -0.863320
Int_energy: 9.981080
@<TRIPOS>MOLECULE
ZINC00000053_3
20 20 1 0 0
Name: ZINC00000351_12
Grid Score: -30.763229
Grid_vdw: -27.735493
Grid_es: -3.027738
Int_energy: 4.097543
@<TRIPOS>MOLECULE
ZINC00000351_12
31 31 1 0 0
我已经执行了下面的 awk 脚本
awk -F'_' '/ZINC/ {print $1}' data.file > out.file
获得的输出:
Name: ZINC00000036
ZINC00000036
Name: ZINC00000053
ZINC00000053
Name: ZINC00000351
ZINC00000351
但是,我还需要输出文件中的其他行,如下所示:
Name: ZINC00000036
Grid Score: -23.170839
Grid_vdw: -22.304409
Grid_es: -0.866430
Int_energy: 4.932559
@<TRIPOS>MOLECULE ZINC00000036 18 18 1 0 0
Name: ZINC00000053
Grid Score: -23.739523
Grid_vdw: -22.876204
Grid_es: -0.863320
Int_energy: 9.981080
@<TRIPOS>MOLECULE ZINC00000053 20 20 1 0 0
Name: ZINC00000351
Grid Score: -30.763229
Grid_vdw: -27.735493
Grid_es: -3.027738
Int_energy: 4.097543
@<TRIPOS>MOLECULE ZINC00000351 31 31 1 0 0
由于我的数据文件很大并且无法对其进行转换,因此我将非常感谢任何有关 awk 的帮助。
最佳答案
sed '/ZINC/s/_.*//' file
awk '/ZINC/{sub(/_.*/,"")}1' file
关于linux - awk 脚本匹配模式,然后删除分隔符后的整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222613/