首页 > 解决方案 > 使用 AWK 获取整个记录信息

问题描述

我有一个 SDF 文件,如下所示:

$$$$
Mrv0541 02231217452D
 7 6 0 0 0 0 999 V2000
 1.2375 2.1434 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
 0.8250 1.4289 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
 1.2375 0.7145 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
 2.0625 0.7145 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
 0.8250 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
 1.2375 -0.7145 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
 0.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
 1 2 1 0 0 0 0
 2 3 1 0 0 0 0
 3 4 2 0 0 0 0
 3 5 1 0 0 0 0
 5 6 1 0 0 0 0
 5 7 2 0 0 0 0
M END
> <DATABASE_ID>
HMDB0000005
> <DATABASE_NAME>
hmdb
> <SMILES>
CCC(=O)C(O)=O
> <INCHI_IDENTIFIER>
InChI=1S/C4H6O3/c1-2-3(5)4(6)7/h2H2,1H3,(H,6,7)
$$$$

我想打印填充字段 <DATABSE_ID> 的条件的整条记录的信息等于HMDB0000005。每条记录的分隔符是“$$$$”。到目前为止我尝试过的是:

awk -v RS="[$]{4}\n" 'NF'  '{if $1 == "HMDB0000005"}' file.sdf

但这给了我一个错误,我认为这是因为我的命令有问题。你能告诉我我怎样才能做到这一点吗?

谢谢

标签: awk

解决方案


如果这是您正在寻找、使用 GNU 编写和测试的内容,请尝试关注awk。这将查找从$$$$到下一个的记录$$$$,并将检查该记录是否具有HMDB0000005它的值,然后打印该记录。

awk -v RS='(^|\n)[$]{4}\n' '/HMDB0000005\n/' Input_file

或更强大(与以上恕我直言相比)

awk -v RS='(^|\n)[$]{4}\n' '/\n> <DATABASE_ID>\nHMDB0000005\n/' Input_file

推荐阅读