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
我尝试了 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