2014-12-02 102 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