繁体   English   中英

unix:根据列值合并文件

[英]unix: merge files based on column value

我有两个文件,看起来像这样:

文件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(相同的行顺序)完全相同,但添加了第二列。 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 ...

如果你想保持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 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM