根据字段比较两个文件
问题描述:
我有两个具有以下数据的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|
答
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|
为什么不是'A | B | C | 1 | D'?满足条件“A,B,C”匹配并且“D!= x” – karakfa
此Q不清楚且不完整。请指定字段分隔符和文件比较方法(即compare * file1,line1,fields {1,2,3,5}'* to * file2,line1,fields {1,2,3,5}'*或别的东西)。包括你编写的代码来解决这个问题。 – agc
正如问题中提到的字段分隔符是|。 将文件1的第1,第2和第3字段与文件2的第1,第2和第3进行比较,如果匹配,则比较两个文件的第5字段。如果第5个字段不同,则输出应该是file1的第1,第2和第3个字段,否则应该继续检查其他行。 – mj0889