【问题标题】:join two csv using key columns使用键列连接两个 csv
【发布时间】:2014-07-08 16:10:23
【问题描述】:

我想使用城市名称作为键列连接两个文件。我只想加入两个csv中重复的城市数据...

例如

文件1.csv

London, 10,15
Rome, 12,18
Paris, 8, 16
Lissabon, 10,17

文件2.csv

London, 11,16
Berlin, 13,19
Paris, 12,18
Lissabon, 11,19

我希望的结果,

London,10,15,11,16 
Paris,8,16,12,18
Lissabon,10,17,11,19

如何在 bash 中做到这一点?

【问题讨论】:

  • 不匹配的部分怎么办?

标签: bash csv


【解决方案1】:

bash 有一个join 命令,尽管它要求对输入进行排序:

$ join -j 1 -t ',' <(sort File1.csv) <(sort File2.csv)
Lissabon, 10,17, 11,19
London, 10,15, 11,16
Paris, 8, 16, 12,18

【讨论】:

  • 嗯,这改变了输入数据的顺序。
  • 技术上,joinbash 无关。它只是存在于许多/大多数 Linux/Unix 系统上的命令(有几种不同的风格)。如果你的 shell 是shkshzsh,甚至是csh,你也可以运行它...
  • @EnricAgudPique 如果您选择此答案或其他检查来接受它,如果您觉得有用,请投票!
【解决方案2】:

使用这个awk

awk -F, 'FNR==NR {a[$1]=$0;next} $1 in a{p=$1; sub(/^[^,]+, */, "");
         print a[p], $0}' OFS=, file1 file2
London, 10,15,11,16
Paris, 8, 16,12,18
Lissabon, 10,17,11,19

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 2021-11-06
    • 2018-04-27
    • 1970-01-01
    • 2020-11-03
    • 2016-08-12
    • 1970-01-01
    • 2014-01-14
    相关资源
    最近更新 更多