我有 2 个文件需要根据 2 列合并。我尝试过使用 awk 并尝试使用 _ 组合两列,然后使用 join 命令。使用join时,即使排序后,某些记录仍不匹配,并且创建了多条记录。在 a{print $0, a[$1,$2]}' 文件 1 文件 2 中使用 awk awk 'NR==FNR{a[$1,$2]=$3;next} ($1,$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 的新手!
最佳答案
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
,如果需要也可以对其进行排序
关于unix - 按 2 列连接 2 个文件,使用 awk 保留所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23086675/