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

时间:2011-06-18 01:41:43

标签: unix join

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

档案1 ......

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

档案2 ......

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

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

# join -1 2 -2 2 -a 1 -o 1.2 1.3 file1.csv file2.csv
123 JohnDoe
456 BobDylan
789 BillyJean

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

# join -1 2 -2 2 -a 1 -o 1.2 1.3 2.3 file1.csv file2.csv
 DaddyDoeoe
 DaddyDylann
789 BillyJean DaddyJean

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

编辑:这是我对实际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

3 个答案:

答案 0 :(得分:5)

您使用了-a选项。

  

-a file_number

     

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

此外,奇数覆盖行为表示您已嵌入回车符(\r)。我会用cat -v或文本编辑器仔细检查那些fies,这些编辑器并不试图对Windows文件“聪明”。

答案 1 :(得分:2)

在命令中使用正确的“字段”分隔符。

当我将数据更改为true csv并使用

join -t, -1 2 -2 2 -a 1 -o 1.2 1.3 2.3 file1.csv file2.csv
# ---^^^

我得到了

123,JohnDoe,DaddyDoe
456,BobDylan,DaddyDylan
789,BillyJean,DaddyJean

我希望这会有所帮助。

答案 2 :(得分:-1)

如果您正在执行此命令行,为什么不使用粘贴? paste -d,file1 file2>> file3的

-d arugment是分隔符