1

我正在尝试外部加入 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

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

我真的很困惑。

4

1 回答 1

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
于 2013-07-19T15:22:28.800 回答