2014-12-02 100 views
0

我想用unix比较两个csv文件的内容。比较的规则是比较两个文件的应用程序名称,如果匹配,比较file_number和返回成功或失败消息的基础上compare.ie如果两个file_number匹配。比较Unix中两个csv的内容

第一个文件是:

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 

任何帮助?

+0

我无法弄清楚你是如何试图比较它们的。而不是举一个例子,你能解释一下这个比较的规则吗? – 2014-12-02 21:39:44

+0

你的问题太含糊。 为了更深入地了解您的后续工作:为两个CSV表提供列名,并定义您的成功和失败标准。 – Odin 2014-12-02 21:45:58

+0

是的,我添加了它 – Neethu 2014-12-02 21:47:15

回答

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 

加入的文件,因此,unpairable线从文件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 
+0

,完美的工作!谢谢@jherran – Neethu 2014-12-02 23:04:47