我有两个格式化的文件,其中的行和字段由分隔符分隔(在本例中为 '*')
文件1:
qwerty*asd*1111111*poiu*222222*mnb
nbcvxm*hjf*3333333*jhjd*444444*bvc
dhfkjs*bmb*5555555*vcxz*666666*ewr
文件2:
cvcbfb*fgh*1111111*hgre*222222*hwg
qwerty*asd*2222222*poiu*333333*mnb
nbcvxm*hjf*4444444*jhjd*555555*bvc
tyterw*nbv*5555555*jhgf*666666*dsa
nbcvxm*hjf*7777777*jhjd*888888*bvc
我想获取 File1 中存在但不在 File2 中的行,但使用两个字段的并集作为比较标准
例如,使用 field_3 和 field_5 的并集作为比较标准
The line in File1 qwerty*asd*1111111*poiu*222222*mnb exist in File2 as cvcbfb*fgh*1111111*hgre*222222*hwg
The line in File1 dhfkjs*bmb*5555555*vcxz*666666*ewr exist in File2 as tyterw*nbv*5555555*jhgf*666666*dsa
因此,这种情况下预期的结果是:
nbcvxm*hjf*3333333*jhjd*444444*bvc
答案1
鉴于
$ head File{1,2}
==> File1 <==
qwerty*asd*1111111*poiu*222222*mnb
nbcvxm*hjf*3333333*jhjd*444444*bvc
dhfkjs*bmb*5555555*vcxz*666666*ewr
==> File2 <==
cvcbfb*fgh*1111111*hgre*222222*hwg
qwerty*asd*2222222*poiu*333333*mnb
nbcvxm*hjf*4444444*jhjd*555555*bvc
tyterw*nbv*5555555*jhgf*666666*dsa
nbcvxm*hjf*7777777*jhjd*888888*bvc
然后使用 awk
$ awk -F '*' 'NR==FNR {keys[$3, $5]; next} !( ($3 SUBSEP $5) in keys)' File2 File1
nbcvxm*hjf*3333333*jhjd*444444*bvc