如何使用awk/bash脚本比对含多分隔符的两个文件并输出匹配结果?
比对实现方案
完全可以通过awk脚本实现,执行效率高,适合处理大基因组类文本文件,具体命令如下:
awk 'BEGIN{FS=OFS="\t"} NR==FNR{keys[$0]=1;next} {split($4,arr,/[,|]/);for(i in arr){if(keys[arr[i]]){print $1,$2,$3,arr[i]}}}' file2 file1
命令说明
BEGIN{FS=OFS="\t"}:预先设置输入、输出的分隔符均为制表符,匹配你提供的文件格式NR==FNR{keys[$0]=1;next}:优先读取file2的全部内容,将每一行的关键词存入哈希表keys,读取完file2后再处理file1split($4,arr,/[,|]/):将file1每行的第4列按|和,两个符号切割为数组,把注释字段里的所有基因ID/转录本ID单独拆分出来- 遍历切割后的数组,只要某个ID存在于提前存好的关键词哈希表中,就输出当前行的前3个字段+匹配到的ID
补充说明
如果file1某行的第4列包含多个file2里的关键词,命令会自动输出多条对应结果;如果需要对结果去重,可在命令末尾追加| sort -u。
内容的提问来源于stack exchange,提问作者user3774046
相关产品推荐
相关产品推荐

