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.我也很欣赏在没有标题的情况下如何做到这一点的建议.
谢谢!
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)
同
FILE1.TXT
id city car type model
1 york subaru impreza king
2 kampala toyota corolla sissy
3 luzern chrysler gravity falcon
Run Code Online (Sandbox Code Playgroud)FILE2.TXT
id name rating
3 zanzini PG
2 tara X
Run Code Online (Sandbox Code Playgroud)输出:
id city car type model name rating
2 kampala toyota corolla sissy tara X
3 luzern chrysler gravity falcon zanzini PG
Run Code Online (Sandbox Code Playgroud)PS要保留TAB分隔符,请传递-t选项:
join -t' ' ...
Run Code Online (Sandbox Code Playgroud)
在SO上显示"包含TAB字符"很难.输入^VTAB(例如在bash中)