我有两个文件 fileA 和 fileb
菲拉
1.1.1.1
2.2.2.2
3.3.3.3
4.4.4.4
5.5.5.5
文件B
4.4.4.4
2.2.2.2
输出应该是
1.1.1.1
3.3.3.3
5.5.5.5
文件 A 的大小约为 60GB,文件 B 的大小为 1GB
我用了这个命令 grep -vf 文件B 文件A > new.txt
但过了一段时间它会自动停止并显示为 被剛剛
在这种情况下,有人可以帮助我吗?
提前致谢
答案1
您可以采取几种方法。如果您要处理这种大小的文件,只需连接两个文件并仅打印出现一次的行可能会有效:
cat FILEA FILEB | sort | uniq -c | awk '$1==1{print $2}'
1.1.1.1
3.3.3.3
5.5.5.5
如果值不是单个“单词”(即,每行上可能有空格和更多字段),那么您可以告诉 awk 在相关行上的唯一计数“1”之后打印该行上的所有内容:
cat FILEA FILEB | sort | uniq -c | awk '$1==1{print substr($0,index($0,"1 ")+2)}'
1.1.1.1
3.3.3.3
5.5.5.5
当然,如果 FILEA 中的某些行可能是文件中的重复行,但是由于它们未出现在 FILEB 中而您想保留它们,则可能需要采用不同的方法,例如在 FILEB 中定义一个值数组,然后检查 FILEA 中的每一行以查看它是否在数组中,如下所示:
awk 'BEGIN{ref="FILEB";while (getline < ref){remove[$0]};close(ref)}{if (!($0 in remove)){print}}' FILEA
1.1.1.1
3.3.3.3
5.5.5.5