如何使用awk从pdb文件提取指定字段并生成TSV文件?
PDB批量汇总为TSV脚本修改方案
原脚本错误点
- 转义符拼写错误:制表符应为
\t、换行符应为\n,原代码写的/t//r属于无效转义,无法输出正确分隔符 - 字段提取逻辑错误:未指定字段分隔符为制表符,若字段内容包含空格,仅取
$2只会拿到第一个单词,无法获取完整值 - 执行逻辑冗余:同一个pdb文件调用4次awk处理,效率低且多次追加写入易出现格式错乱
- 开头
cat > newFile.txt会等待标准输入,脚本运行后会卡住无法自动执行后续逻辑
修改后完整代码
#!/bin/bash # 初始化输出TSV文件 > result.tsv # 遍历所有pdb文件 for f in *.pdb; do awk -F'\t' ' # 匹配对应字段存入变量 $1 == "ACCESSION" {acc = $2} $1 == "DEFINITION" {def = $2} $1 == "SOURCE" {src = $2} $1 == "LOCUS" {loc = $4} # 处理完当前文件后输出一行TSV数据 END { print acc "\t" def "\t" src "\t" loc } ' "$f" >> result.tsv done
优化说明
- 指定
-F'\t'将awk字段分隔符设为制表符,完全匹配pdb文件的字段分割规则,避免内容中的空格干扰字段识别 - 单个pdb文件仅调用一次awk处理,所有字段提取完成后统一输出一行,大幅提升执行效率
- 输出直接使用标准制表符分隔、默认换行符收尾,完全符合TSV格式规范
内容的提问来源于stack exchange,提问作者Petras Nasvytis
相关产品推荐
相关产品推荐

