使用Unix JOIN命令合并两个文件

Nat*_*ate 6 unix join

尽管进行了所有研究,但这并不像我预期的那样有效.我肯定错过了什么...

档案1 ......

# cat file1.csv
1       123     JohnDoe
1       456     BobDylan
1       789     BillyJean
Run Code Online (Sandbox Code Playgroud)

档案2 ......

# cat file2.csv
111     123     DaddyDoe
222     456     DaddyDylan
666     777     Stranger
555     789     DaddyJean
444     888     Stranger
333     999     Stranger
Run Code Online (Sandbox Code Playgroud)

我想加入第二个领域.当我执行左外连接并且只包含第一个文件中的字段时,一切看起来都很花哨.

# join -1 2 -2 2 -a 1 -o 1.2 1.3 file1.csv file2.csv
123 JohnDoe
456 BobDylan
789 BillyJean
Run Code Online (Sandbox Code Playgroud)

但是只要我从第二个文件中包含一个字段,就会变得很糟糕.

# join -1 2 -2 2 -a 1 -o 1.2 1.3 2.3 file1.csv file2.csv
 DaddyDoeoe
 DaddyDylann
789 BillyJean DaddyJean
Run Code Online (Sandbox Code Playgroud)

最后一行看起来很完美!与他人有什么关系?任何的想法?提前致谢!

编辑:这是我尝试使用实际的CSV.

# cat file1.csv
1,123,JohnDoe
1,456,BobDylan
1,789,BillyJean

# cat file2.csv
111,123,DaddyDoe
222,456,DaddyDylan
666,777,Stranger
555,789,DaddyJean
444,888,Stranger
333,999,Stranger

# join -t, -1 2 -2 2 -a 1 -o 1.2 1.3 2.3 file1.csv file2.csv
,DaddyDoeoe
,DaddyDylann
789,BillyJean,DaddyJean
Run Code Online (Sandbox Code Playgroud)

gee*_*aur 5

你用过这个-a选项.

-a 文件编号

除默认输出外,还为文件file_number中的每个不可操作行生成一行.

此外,奇数覆盖行为表明您已嵌入回车符(\r).我会仔细检查那些fies cat -v或者是一个文本编辑器,它不会试图对Windows文件"聪明".