我如何将多个CSV文件合并为一列。我记录的是从网页上刮下的公司的图表位置。只有第一个文件有两列,位置1到100,第二列包含公司'名称。所有其他文件只有一列;仅获得公司名称。现在我想合并这些如下所述。 Mac / Linux解决方案首选。我可以写Bash,一点点JavaScript,但Perl不是我的强项。
1.csv
:
position,name
1,microsoft
2,apple
3,google
以其日期命名的各种其他文件看起来像这样:
2.csv
:
name
microsoft
apple
google
3.csv
:
name
apple
microsoft
google
合并后的版本如下所示:
position,name,name,name
1,microsoft,microsoft,apple
2,apple,apple,microsoft
3,google,google,google
我能找到的唯一解决方案,只需添加(或连接)内容一个接一个,这不是我正在寻找的。 p>
答案 0 :(得分:0)
你还没有真正指出你喜欢哪种语言。但是如果你想在python中工作,你可以下载pandas并将你的csv加载到pandas表中。然后,您可以使用表连接来实现您所要求的:)
答案 1 :(得分:0)
以下是使用jq的解决方案。如果filter.jq
包含以下过滤条件:
def parse:
reduce ( inputs
| {f:input_filename, r:split(",")}
| select(.r|length>0)
) as $i (
{}
; .[$i.f] += [$i.r]
)
;
def reorg:
range([ map_values(length)[] ] | max) as $r
| [ .[] | .[$r] // [range(.[0]|length)|""] | .[] ]
;
parse | reorg | join(",")
文件1.csv
,2.csv
和3.csv
包含示例数据,然后是命令
$ jq -Rrn -f filter.jq 1.csv 2.csv 3.csv
产生
position,name,name,name
1,microsoft,microsoft,apple
2,apple,apple,microsoft
3,google,google,google