合并/加入两个表快速linux命令行

Dna*_*iel 4 unix linux merge awk join

假设我有两个相对较大的制表符分隔文件file1.txt,file2.txt.

file1.txt
id\tcity\tcar\ttype\tmodel

file2.txt 
id\tname\trating
Run Code Online (Sandbox Code Playgroud)

我们假设file1.txt有2000个唯一ID,因此有2000个唯一行,而file2.txt只有1000个唯一行,因此有1000个唯一ID.有没有办法合并这两个表?

情况1.通过file1.txt中的id合并它们,其中当file2.txt中没有id时,将填写NAs.

案例2.在file2.txt中通过id合并它们,其中只有file2.txt中的id将打印出file1.txt和file2.txt中的字段.

注意:合并的新文件也应该是制表符分隔的文件,也带有头文件.笔记2.我也很欣赏在没有标题的情况下如何做到这一点的建议.

谢谢!

seh*_*ehe 8

join -j 1 <(sort file1.txt) <(sort file2.txt)
Run Code Online (Sandbox Code Playgroud)

您的"案例2"是否只使用标准的unix工具.当然,如果文件已排序,您可以删除排序.

如果您包含标题,则可能依赖于数字ID来将连接标题排序到顶部:

join -j 1 <(sort file1.txt) <(sort file2.txt) | sort -n
Run Code Online (Sandbox Code Playgroud)

PS要保留TAB分隔符,请传递-t选项:

 join -t'    ' ...
Run Code Online (Sandbox Code Playgroud)

在SO上显示"包含TAB字符"很难.输入^VTAB(例如在bash中)