awk 打印所有匹配行,包括重复项

awk 打印所有匹配行,包括重复项

如何打印两个文件之间的所有匹配行(包括重复项)

源文件:

SNP value
RS1 0.55
RS2 0.52
RS3 0.25
RS4 0.22

查询文件:

SNP
RS1
RS2
RS2
RS3
RS4
RS4

期望的输出:

SNP value
RS1 0.55
RS2 0.52
RS2 0.52
RS3 0.25
RS4 0.22
RS4 0.22

目前我正在使用以下命令来检索匹配的行,但正在删除重复项,而我需要打印包括重复项在内的所有行,

有什么建议请

谢谢

awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$0;next}a[$1]{print}' queryfile sourcefile > output

答案1

join命令将为您将这两个文件连接在一起

join sourcefile queryfile

输出(来自示例文件)

SNP value
RS1 0.55
RS2 0.52
RS2 0.52
RS3 0.25
RS4 0.22
RS4 0.22

答案2

本质上只是以相反的顺序处理文件的问题

$ awk 'BEGIN{FS=OFS="\t"} NR==FNR{a[$1]=$0;next} a[$1]{print a[$1]}' sourcefile queryfile
SNP value
RS1 0.55
RS2 0.52
RS2 0.52
RS3 0.25
RS4 0.22
RS4 0.22

相关内容