将行与匹配的第一列合并

将行与匹配的第一列合并

我一直在尝试使用 awk 来合并两个文件,当它们具有相同的第一列时。这是我的示例文件:

文件A.txt

A2M    1
A4GALT    11
AAAS    35
AAGAB    7

文件B.txt

A4GALT    2
AAAS    17
AAGAB    7

如您所见,第二个文件缺少A2M.如果我缺少一个条目,那么我希望该条目0在最终输出中读取。就这样:

A2M    1    0
A4GALT    11    2
AAAS    35    17
AAGAB    7    7

我的实验室伙伴建议我使用,awk因为join它对我来说不能正常工作。在一些帮助下,我想出了这个awk命令:

awk -F "\t" 'FNR==NR {h[$1] = $2;next} BEGIN{ OFS = "\t"} {print $0,$2?h[$1]:"0"}' FileB.txt FileA.txt

0但是,当没有匹配项时,我的输出不会输出FileB.txt,而是不打印任何内容。知道出了什么问题吗?

答案1

如果你加入两个文件,这是一个工作join:

join -1 1 -2 1 -a 1 -o 1.1 -o 1.2 -o 2.2 -e "0" FileA.txt FileB.txt

在哪里:

  • -1 1 -2 1定义要连接的字段(在两个文件中都是第一个)
  • -a 1强制join打印不可配对的行FileA.txt
  • -o 1.1 1.2 2.2是输出格式
  • -e "0"定义要存储在空字段中的值

输出:

A2M 1 0
A4GALT 11 2
AAAS 35 17
AAGAB 7 7

相关内容