包含文件名和哈希值的文本文件 - 提取具有重复哈希值的行

包含文件名和哈希值的文本文件 - 提取具有重复哈希值的行

我使用以下格式生成了一个包含文件名和 sha-256 哈希值的大型文本文件 - 哈希值后每行末尾的新行。

文件_1.txt 8208ad321576b521b23b07b9ba598e5c43b03ec4172c96fdbd35a858ec205ae6

file_2.txt ee508a6e34a2383db1b177cb9527bed16ba72b47ceb4d33ab71b47a44c1d0c31

file_3.txt aaf6b8c4a95d0e8f191784943ba1ea5c0b4d4baab733efe8ceb8b35478b6afd2

当我说大时——它是数百万行——数百万个哈希值。

我花了相当长的时间来生成哈希值 - 因为文件跨越 30 多个硬盘驱动器,使用重复文件查找程序是不可能的 - 文件名包含存储文件的驱动器。

是时候释放一些磁盘空间了。

我想删除文本文件中具有仅出现一次的唯一哈希的行。

我想保留文本文件中哈希出现两次或多次的所有行。

答案1

你可以做得比这个两遍awk解决方案更糟糕

awk 'NR == FNR{if ($2 in a) b[$2]++;a[$2]++; next}; $2 in b' file file

在第一遍中,使用数组b来跟踪多次遇到的哈希值。在第二遍中,如果哈希值存在于其中,则打印一条记录b

交替

sort -k2,2 file | uniq -f 1 -D

这涉及按第二个字段对文件进行排序,并通过管道uniq打印所有重复记录(通过 进行比较时跳过第一个字段-f 1)。考虑到输入文件的大小,这可能会占用大量资源

相关内容