比较Unix中两个csv的内容

时间:2014-12-02 21:34:23

标签: bash unix command-line

我想使用unix比较两个csv文件的内容。这个比较的规则是比较两个文件的应用程序名称(如果匹配)比较file_number并根据比较返回成功或失败消息。如果两个file_number匹配。

第一个文件是:

file_number Application_name

25,AWX
78,UYH
90,TGY
89,GHB

第二个文件是:

file_number Application_name日期消息

92, AWX, 2014-12-01 , SUCCESS 
66, AWX, 2014-12-02 , SUCCESS 
3, UYH, 2014-12-01 , SUCCESS 
3, TGY, 2014-12-02 , SUCCESS 
90, TGY , 2014-12-01 , SUCCESS 
89, GHB , 2014-12-02 , SUCCESS 

我的最终输出应该是这样的:

AWX , FAIL
UYH, FAIL
TGY, SUCCESS
GHB, SUCCESS

任何帮助?

1 个答案:

答案 0 :(得分:1)

首先,您需要订购文件。

sort input1.txt > filename1.txt
sort input2.txt | cut -f1,2,4 -d, > filename2.txt

在第二个文件中,我删除了日期,因为输出中没有必要。

$ join -a1 -j1 -t, filename1.txt filename2.txt | cut -f2,4 -d, | sort > intermediate1.txt

加入文件,保留文件1 -a1中无法使用的行。结果连接两个文件的字段,因此我们只需要字段2和4(cut)然后对输出进行排序。

$ cat intermediate1.txt
AWX
GHB, SUCCESS
TGY, SUCCESS
UYH

$ cat intermediate1.txt | awk '!/SUCCESS/{print $1", FAIL"}' > intermediate2.txt

将字符串, FAIL添加到不包含SUCCESS的行。

$ join -a1 -t, intermediate1.txt intermediate2.txt > final.txt

再次加入你就拥有它。

$ cat final.txt 
AWX, FAIL
GHB, SUCCESS
TGY, SUCCESS
UYH, FAIL