首页 > 解决方案 > 如何根据 File1 第一列比较 3 个 csv 文件

问题描述

我正在尝试在 bash 中比较 3 个 csv 文件并将结果保存为新文件,无论值是否匹配

文件 1.csv

    20180501,1000
    20180502,2000
    20180503,3000
    20180504,4000

文件2.csv

    20180501,1000
    20180502,1000
    20180504,4000

文件 3.csv

    20180501,1000
    20180502,2000
    20180503,3000

预期产出

    Date,Value1,Value2,Value3,Status
    20180501,1000,1000,1000,Match
    20180502,2000,1000,2000,Unmatch
    20180503,3000,,3000,Missing
    20180504,4000,4000,,Missing

一直在尝试,但没有任何工作。任何人都可以帮我解决这个问题。

标签: bashcsv

解决方案


这行得通。

v=$(cat File1.csv File2.csv File2.csv | cut -d, -f1 | sort -u | sed 's/$/,/')
f() { { join -t, -v 1 - $1 <<<"$v"; cat $1; } | sort; }
join -t, <(join -t, <(f File1.csv) <(f File2.csv)) <(f File3.csv) \
| awk -F ',' '{ printf $0; if ($2 == "" || $3 == "" || $4 == "") print ",Missing"; else if ($2 == $3 && $3 == $4) print ",Match"; else print ",Unmatch"; }'

推荐阅读