使用Unix JOIN命令合并两个文件
尽管进行了大量研究,但这并不像我预期的那样有效。我一定错过了什么 文件1使用Unix JOIN命令合并两个文件,unix,join,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 DaddyJea
# 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
您使用了
-a
选项
-文件编号
除了默认输出外,为文件\u编号中的每个不成对行生成一行
此外,奇数覆盖行为表明您具有嵌入的回车符(\r
)。我会使用cat-v
或一个不想对Windows文件“聪明”的文本编辑器仔细检查这些文件。在命令中使用正确的“字段”分隔符
当我将您的数据更改为真正的csv并使用
join -t, -1 2 -2 2 -a 1 -o 1.2 1.3 2.3 file1.csv file2.csv
# ---^^^
我得到
我希望这有帮助。如果您正在执行此命令行,为什么不使用粘贴?
粘贴-d,文件1文件2>>文件3
-d分隔符是分隔符您使用的是什么版本的操作系统?根据文件扩展名,列是否真的用“,”分隔?-o选项需要引号,或者如果是空白,可以使用逗号分隔。不确定这是否是问题所在,但似乎是部分问题,@shelleter Unix 3.5。它们是以制表符分隔的文件。我在尝试排除故障时去掉了逗号@苏鲁特我试了一下,但似乎没有改变任何事情。谢谢@Shelleter。我这样做了,但得到了非常相似的结果。我已经在我的问题中添加了代码。嗨@geekosaur,是的,这就是我想要的。@Nate:那你为什么感到困惑?你得到了你想要的;与SQL外部联接一样,另一个文件中的字段为NULL(空)。应该没有丢失的数据。不仅如此,前两个输出行还将两个文件的名称混合在一起。啊,我知道了。你有混合换行的行。扩展响应。@geekosuar,你是个救生员。是马车回来的时候。我把我的FTP应用程序从二进制转换为ASCII传输,现在我是黄金。谢谢
123,JohnDoe,DaddyDoe
456,BobDylan,DaddyDylan
789,BillyJean,DaddyJean