我使用以下格式生成了一个包含文件名和 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
)。考虑到输入文件的大小,这可能会占用大量资源