【问题标题】:Merge CSV file with Bash将 CSV 文件与 Bash 合并
【发布时间】:2015-06-17 14:55:18
【问题描述】:

我有 2 个这样的 csv 文件:

name;num;value1
name1;1;1
name1;2;10
name2;1;5

name;num;value2
name1;2;8
name2;2;6
name1;1;7

我想像这样合并这 2 个 CSV

name;num;value1;value2
name1;1;1;7
name1;2;10;8
name2;1;5;6

这 2 个 csv 有 name 和 num 但顺序不同。如何以正确的顺序在第一个文件中添加 value2 列?

【问题讨论】:

    标签: bash csv merge


    【解决方案1】:

    你可以使用这个 awk:

    awk 'BEGIN{FS=OFS=";"} FNR==NR{a[$1,$2]=b[$1]=$NF;next} 
             {print $0, (a[$1,$2])?a[$1,$2]:b[$1]}' file2 file1
    name;num;value1;value2
    name1;1;1;7
    name1;2;10;8
    name2;1;5;6
    

    【讨论】:

    • 谢谢你的回答,你能解释一下你的代码吗,我对awk不太了解,我想了解我的代码在做什么
    • 我建议阅读一些 awk 入门教程。这个答案是使用 2 个关联数组,但是 awk 的一些基础知识会让你很好地理解。我们只能在 cmets 中写入有限的文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2013-07-23
    • 2014-03-12
    • 2012-01-14
    • 2020-07-30
    • 2016-03-25
    相关资源
    最近更新 更多