2017-06-02 109 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