我一直在尝试使用 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