删除文件中的重复项

删除文件中的重复项

我有两个文件 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

相关内容