2017-06-02 110 views
-1

我有兩個具有以下數據的UNIX文件。我必須比較文件1的字段1,字段2和字段3與文件2,如果匹配,我必須檢查文件1中的字段5是否與文件2的字段5匹配,如果不匹配,則必須打印它從文件1,否則只是忽略。根據字段比較兩個文件

文件1

A|B|C|1|D| 

A|B|D|1|D| 

A|B|E|1|D| 

A|B|F|1|D| 

文件2

A|B|Z|1|D| 

A|B|C|1|x| 

A|B|D|1|y| 

A|B|E|1|D| 

所以結果應該是 A | B | C | 1 | d |

A|B|D|1|D| 
+1

爲什麼不是'A | B | C | 1 | D'?滿足條件「A,B,C」匹配並且「D!= x」 – karakfa

+0

此Q不清楚且不完整。請指定字段分隔符和文件比較方法(即compare * file1,line1,fields {1,2,3,5}'* to * file2,line1,fields {1,2,3,5}'*或別的東西)。包括你編寫的代碼來解決這個問題。 – agc

+0

正如問題中提到的字段分隔符是|。 將文件1的第1,第2和第3字段與文件2的第1,第2和第3進行比較,如果匹配,則比較兩個文件的第5字段。如果第5個字段不同,則輸出應該是file1的第1,第2和第3個字段,否則應該繼續檢查其他行。 – mj0889

回答

0

awk來救援!

這對匹配字段1,2,3,5

$ awk -F'|' '{k=$1 FS $2 FS $3 FS $5} NR==FNR{a[k];next} k in a' file2 file1 

A|B|E|1|D| 

你的問題是不同的,但是,結果不匹配你的,你需要解釋爲什麼一條記錄不應該打印

$ awk -F'|' '{k=$1 FS $2 FS $3} 
    NR==FNR {a[k]=$5; next} 
    k in a && a[k]!=$5' file2 file1 

A|B|C|1|D| 
A|B|D|1|D| 
+0

兩者都應該在結果中 A | B | C | 1 | D | A | B | D | 1 | D | – mj0889

+0

你能解釋一下答案嗎? – mj0889

+1

由於您沒有解決我的查詢,我仍然不確定是否正確答案... – karakfa