我需要根据2列合并2个文件。我尝试过使用awk以及尝试使用_组合2列然后使用join命令。使用连接时,即使在排序后,某些记录也不匹配,并且创建了多个记录。使用awk awk 'NR==FNR{a[$1,$2]=$3;next} ($1,$2) in a{print $0, a[$1,$2]}' file 1 file 2
我可以正确匹配文件,但是当不存在匹配时无法使用零打印输出。
文件1:
chr pos SNP#
1 124 1
1 237 2
1 356 3
2 107 4
2 224 5
文件2:
chr pos SNPHD
1 12 1
1 56 2
1 124 3
1 160 4
1 237 5
1 256 6
1 354 7
2 107 8
2 185 9
2 224 10
期望的输出:
chr pos SNP# SNPHD
1 12 0 1
1 56 0 2
1 124 1 3
1 160 0 4
1 237 2 5
1 256 0 6
1 354 0 7
1 356 3 0
2 107 4 8
2 185 0 9
2 224 5 10
任何帮助都会非常感激,我是大数据文件和unix的新手!
答案 0 :(得分:2)
awk 'NR==FNR{a[$1FS$2]=$3;next}
{k=$1FS$2;print k,(a[k]?a[k]:a[k]*1),$3;delete a[k]}
END{for(k in a)print k,a[k],"0"}' f1 f2
结果未排序:
chr pos SNP# SNPHD
1 12 0 1
1 56 0 2
1 124 1 3
1 160 0 4
1 237 2 5
1 256 0 6
1 354 0 7
2 107 4 8
2 185 0 9
2 224 5 10
1 356 3 0
为了获得更好的格式,您可以将结果传递给column -t
,如果有必要也可以对其进行排序