Bash解析SDF文件时无法忽略空格,Ki(nM)字段无法输出求助
解决SDF文件解析中Ki(nM)字段无法正常输出的问题
问题分析
你的awk代码存在两个核心问题:
- 标签提取不完整:原代码用
$2获取SDF的标签,但像<Ki (nM)>这类包含空格的标签,会被awk默认的空白分隔符拆分成多个字段,导致只取到<Ki,无法匹配后续调用的<Ki (nM)>键。 - 值的前后空白处理:虽然awk默认会忽略值的前导空白,但统一处理前后空白能避免其他异常情况。
修正后的awk代码
awk -v OFS='\t' ' /^>/ { # 提取完整标签:去掉开头的"> ",保留从<到>的完整内容 sub(/^> /, "", $0) tag = $0 next } NF { # 去除值的前后空白后存入数组 val = $0 gsub(/^[[:space:]]+|[[:space:]]+$/, "", val) f[tag] = val } $0 == "$$$$" { print f["<pH>"], f["<PMID>"], f["<Ki (nM)>"] } ' P46098.sdf
代码说明
- 标签提取:用
sub(/^> /, "", $0)去掉行首的>,直接将整行剩余内容作为完整标签,避免空格分割导致的标签截断。 - 值处理:用
gsub去除值的前后空白,确保像0.0316这类带前导空格的内容能被正确存储为0.0316。 - 触发输出:当遇到SDF文件的分隔符
$$$$时,输出目标字段。
内容的提问来源于stack exchange,提问作者user18671571
相关产品推荐
相关产品推荐

