unix:根据列值合并文件

时间:2012-03-21 14:32:32

标签: bash unix merge

我有两个文件,如下所示:

文件1(2列):

ID1 123
ID2 234
ID3 232
ID4 344
...

文件2(> 100万列)

ID2 A C ...
ID3 G T ...
ID1 C T ...
ID4 A C ... 
...

我想将基于ID的文件1的第2列的值添加到文件2作为第二列。因此合并后的文件应如下所示:

ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ... 
...

与文件2(行的顺序相同)完全相同,但添加了第2列。 ID是第一列的值(存在于两个文件中)。文件1的行/ ID比文件2多。文件2中的所有ID都在文件1中,但文件1中的所有ID都不在文件2中。

有没有人知道如何在unix / bash下执行此操作?非常感谢!

1 个答案:

答案 0 :(得分:6)

$ join <(sort file1) <(sort file2)
ID1 123 C T ...
ID2 234 A C ...
ID3 232 G T ...
ID4 344 A C ...

如果您想保持file2

的顺序
$ join -1 1 -2 2 <(sort file1) <(cat -n file2 | sort -k2,2) | sort -k3,3n | cut -d' ' -f1-2,4-
ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ...