Bash 脚本用于比较两个格式化文件中的行

Bash 脚本用于比较两个格式化文件中的行

我有两个格式化的文件,其中的行和字段由分隔符分隔(在本例中为 '*')

文件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

相关内容