我有以下文件:
的 file1.csv
Name,Age,Roll Anu,21,1 Subi,18,2 Blah,10,3
file2.csv
Fruit,Color,Roll Mango,Orange,1 Mango,Blue,1 Apple,Black,3
我想以这样的方式加入这两个文件:
Name,Age,Roll,Fruit,Color Anu,21,1,Mango,Orange Anu,21,1,Mango,Blue Subi,18,2,, Blah,10,3,Apple,Black
我运行了以下命令:
join -t, -a1 -13 -23 -o 1.1,1.2,1.3,2.1,2.2 file1.csv file2.csv
这是我得到的输出:
,Fruit,Colorl ,Mango,Orange ,Mango,Blue ,,bi,18,2 Blah,10,3,Apple,Black
这不是我要求的输出(实际上,我甚至不知道这个输出是怎么来的),所以我再试一次:
join -t, -a1 -13 -23 hi.csv hi2.csv
我得到的输出:
,Name,Age,Fruit,Color ,Anu,21,Mango,Orange ,Anu,21,Mango,Blue Subi,18,2 3,Blah,10,Apple,Black
此时我很无能为力。我在普通join
文件上尝试了.txt
,但它们运行得非常好。我还提到了有关stackoverflow上类似问题的各种其他解决方案,但都没有。请帮忙。
注意:我使用的是Mac。
答案 0 :(得分:1)
似乎 123 给出了必要的提示。
要检查这一点,我在
中准备了您的示例文件\n
(file1.csv
,file2.csv
)\r
(macfile1.csv
,macfile2.csv
)\r\n
(dosfile1.csv
,dosfile2.csv
)。我的测试会话(在cygwin的bash中):
$ join -t, -a1 -13 -23 file1.csv file2.csv
Roll,Name,Age,Fruit,Color
1,Anu,21,Mango,Orange
1,Anu,21,Mango,Blue
2,Subi,18
3,Blah,10,Apple,Black
$ hexdump -c file1.csv
0000000 N a m e , A g e , R o l l \n A n
0000010 u , 2 1 , 1 \n S u b i , 1 8 , 2
0000020 \n B l a h , 1 0 , 3 \n
000002b
$ cat file1.csv | tr "\n" "\r" >macfile1.csv
$ cat file2.csv | tr "\n" "\r" >macfile2.csv
$ hexdump -c macfile1.csv
0000000 N a m e , A g e , R o l l \r A n
0000010 u , 2 1 , 1 \r S u b i , 1 8 , 2
0000020 \r B l a h , 1 0 , 3 \r
000002b
$ cat file1.csv | sed $'s/$/\r/' >dosfile1.csv
$ cat file2.csv | sed $'s/$/\r/' >dosfile2.csv
$ hexdump -c dosfile1.csv
0000000 N a m e , A g e , R o l l \r \n A
0000010 n u , 2 1 , 1 \r \n S u b i , 1 8
0000020 , 2 \r \n B l a h , 1 0 , 3 \r \n
000002f
$ join -t, -a1 -13 -23 file1.csv file2.csv
Roll,Name,Age,Fruit,Color
1,Anu,21,Mango,Orange
1,Anu,21,Mango,Blue
2,Subi,18
3,Blah,10,Apple,Black
$ join -t, -a1 -13 -23 macfile1.csv macfile2.csv
Blah,10,3Age,21,1
$ join -t, -a1 -13 -23 dosfile1.csv dosfile2.csv
,Name,Age,Fruit,Color
,Anu,21,Mango,Orange
,Anu,21,Mango,Blue
,Subi,18
,Blah,10,Apple,Black
$
...并应用推荐的 123 :
$ cat dosfile1.csv | sed $'s/\r//' >dosfile1.fixed.csv
$ cat dosfile2.csv | sed $'s/\r//' >dosfile2.fixed.csv
$ join -t, -a1 -13 -23 dosfile1.fixed.csv dosfile2.fixed.csv
Roll,Name,Age,Fruit,Color
1,Anu,21,Mango,Orange
1,Anu,21,Mango,Blue
2,Subi,18
3,Blah,10,Apple,Black
$
......可以实现预期的输出。
希望它在Mac上的工作方式相同。