awk - 使用 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
但这给了我一个错误,我认为这是因为我的命令有问题。你能告诉我我怎样才能做到这一点吗?
谢谢
解决方案
如果这是您正在寻找、使用 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
推荐阅读
- laravel-8 - 在 Laravel 8 中使用 EasyPost
- python - Cannot install Django on Windows because there is an invalid character in a filename
- survival - 具有时间相关协变量的 Fine-Gray 模型
- assembly - How similar is assembly language to its corresponding machine language?
- c++ - How to pass an n-dim Eigen tensor to a function?
- svelte - Preventing Svelte component parameter reactivity
- wpf - Can't specify a SolidBrushColor
- angular - Angular 组件中的 RxJS 订阅
- microsoft-teams - 仅在设置另一个输入元素时显示一个元素 - 自适应卡片
- python - How to implement the segment function in GEKKO?