比对两个CSV文件共有基因名并输出对应值的awk脚本故障排查
awk基因名匹配脚本问题排查与修复
原脚本的4个核心错误
- 分隔符设置错误:两个文件分隔符不一致,全局设置
-F"|"会导致制表符分隔的file2无法正确拆分字段,完全拿不到正确的基因名列 - 数组键值存储错误:file1的基因名在第6列,对应数值在最后一列,原脚本错误地将第1列(转录本ID)同时作为数组的键和值,完全没有存储需要的基因名和数值映射
- 匹配逻辑错误:原脚本判断条件
A[$10]==$10逻辑错误,正确匹配应判断基因名是否存在于数组键中,使用$10 in A即可 - 字段重拆分缺失:切换文件后修改分隔符不会自动重新解析已读入的行,需要手动执行
$0 = $0触发字段重新拆分
修复后的可运行脚本
awk ' # 先处理file1,构建基因名到数值的映射 FILENAME == "file1" { FS = "|" $0 = $0 # 去掉数值前后的空白字符 gsub(/^[[:space:]]+|[[:space:]]+$/, "", $NF) gene_map[$6] = $NF next } # 再处理file2,匹配输出 { FS = "\t" $0 = $0 cur_gene = $NF if (cur_gene in gene_map) { print cur_gene, gene_map[cur_gene] } }' file1 file2
运行输出结果
KHDRBS2 3.3232
内容的提问来源于stack exchange,提问作者user1738234
相关产品推荐
相关产品推荐

