我正在尝试外连接2个csv文件,但由于某种原因,代码只加入第一行而不是整个文件。
csv1.csv:
csv2.csv:
如图所示,他们有一些共同的领域,有些则没有。所以我想外连接这两个文件。我可以为不存在的值设置空值。 我尝试了这个http://www.theunixschool.com/2012/01/join-command.html寻求帮助,但代码似乎对我不起作用。
例如:
我不确定为什么它只加入第一行。我试过了: join -t“,” - 1 1 csv1.csv csv2.csv 并得到了相同的结果。 -a1或-a2返回除第一行以外的整个csv文件。我不太明白他们为什么无与伦比。 有人可以帮忙吗?
我在这上花了几个小时,似乎我没有取得多大进展。
提前致谢
如果我加入-t“,” - 1 1 -a1 -a2 csv1.csv csv2.csv
我得到了加入的标题,然后是csv1添加的csv2 +不存在的字段。
我真的很困惑。
答案 0 :(得分:1)
如果要利用数据库操作,请使用数据库。
#!/bin/bash
sqlite3 ./temp.db <<EOF | sort >joined.csv
CREATE TABLE a (name varchar(50), port1 real, port2 real, avg real);
CREATE TABLE b (name varchar(50), port1 real, port2 real, avg real);
.mode csv
.import csv1.csv a
.import csv2.csv b
SELECT a.name,a.port1,a.port2,a.avg,b.port1,b.port2,b.avg
FROM a LEFT OUTER JOIN b ON a.name = b.name
UNION
SELECT b.name,a.port1,a.port2,a.avg,b.port1,b.port2,b.avg
FROM b LEFT OUTER JOIN a ON b.name = a.name;
EOF
rm ./temp.db