unix join,尝试进行外连接

时间:2013-07-19 14:08:41

标签: bash unix join outer-join

我正在尝试外连接2个csv文件,但由于某种原因,代码只加入第一行而不是整个文件。

csv1.csv:

enter image description here

csv2.csv:

enter image description here

如图所示,他们有一些共同的领域,有些则没有。所以我想外连接这两个文件。我可以为不存在的值设置空值。 我尝试了这个http://www.theunixschool.com/2012/01/join-command.html寻求帮助,但代码似乎对我不起作用。

例如: enter image description here

我不确定为什么它只加入第一行。我试过了: join -t“,” - 1 1 csv1.csv csv2.csv 并得到了相同的结果。 -a1或-a2返回除第一行以外的整个csv文件。我不太明白他们为什么无与伦比。 有人可以帮忙吗?

我在这上花了几个小时,似乎我没有取得多大进展。

提前致谢

如果我加入-t“,” - 1 1 -a1 -a2 csv1.csv csv2.csv

我得到了加入的标题,然后是csv1添加的csv2 +不存在的字段。

我真的很困惑。

1 个答案:

答案 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