按列合并多个CSV文件

时间:2017-09-10 08:14:06

标签: csv

我如何将多个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

我能找到的唯一解决方案,只需添加(或连接)内容一个接一个,这不是我正在寻找的。

2 个答案:

答案 0 :(得分:0)

你还没有真正指出你喜欢哪种语言。但是如果你想在python中工作,你可以下载pandas并将你的csv加载到pandas表中。然后,您可以使用表连接来实现您所要求的:)

https://pandas.pydata.org/pandas-docs/stable/merging.html

答案 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.csv2.csv3.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