2个文件之间的差异(awk)

Diff between 2 files (awk)

我尝试了 Stack Overflow 中的许多解决方案,但没有一个令人满意的结果。 我有 2 个文件,想从 file1 中删除 file2.

中提到的条目

文件 1

1,email1@domain.com,9
9,email9@domain.com,1
8,email8@domain.com,6
2,email2@domain.com,1
15,email15@domain.com,3
6,email6@domain.com,1

文件 2

email1414@domain.com
email9@domain.com
email15@domain.com
email1919@domain.com

结果

1,email1@domain.com,9
8,email8@domain.com,6
2,email2@domain.com,1
6,email6@domain.com,1

你能帮帮我吗? 我失败的尝试:

awk -F',' 'NR==FNR{c[]++;next};c[] > 0' file2 file1

因为如果没有误报的机会,这可能是最简单的

$ grep -vf file2 file1      

1,email1@domain.com,9   
8,email8@domain.com,6 
2,email2@domain.com,1 
6,email6@domain.com,1   

更好的想法是更改为固定字符串(而不是模式匹配)

$ grep -vfF file2 file1

这是我执行此操作的 awk 文件:

FNR==1 {NFILE++}

NFILE==1 {a[++n]=[=10=]}

NFILE==2 {b[[=10=]]}

END {for (i=1; i<=n; i++) if (!(a[i] in b)) print(a[i])}

按照您的示例,它会打印文件 1 中不在文件 2 中的所有行。

尝试关注 awks,如果这对您有帮助,请告诉我。

解法一:

awk 'FNR==NR{a[[=10=]];next} ( in a){next} 1' File2 FS="," File1

解法二:

awk 'FNR==NR{a[[=11=]];next} !( in a)' File2 FS="," File1