我有两个文件,看起来像这样:
文件1(2列):
ID1 123
ID2 234
ID3 232
ID4 344
...
Run Code Online (Sandbox Code Playgroud)
文件2(> 100万列)
ID2 A C ...
ID3 G T ...
ID1 C T ...
ID4 A C ...
...
Run Code Online (Sandbox Code Playgroud)
我想将基于ID的文件1的第2列的值添加到文件2作为第二列.因此合并的文件应如下所示:
ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ...
...
Run Code Online (Sandbox Code Playgroud)
所以与文件2(相同的行顺序)完全相同,但添加了第二列.ID是第一列的值(存在于两个文件中).文件1具有比文件2更多的行/ ID.文件2中的所有ID都在文件1中,但文件1中的所有ID都不在文件2中.
有没有人知道如何在unix/bash下执行此操作?非常感谢!
$ join <(sort file1) <(sort file2)
ID1 123 C T ...
ID2 234 A C ...
ID3 232 G T ...
ID4 344 A C ...
Run Code Online (Sandbox Code Playgroud)
如果你想保持秩序 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 ...
Run Code Online (Sandbox Code Playgroud)