
次の形式を使用して、ファイル名とsha-256ハッシュを含む大きなテキストファイルを作成しました。ハッシュの後の各行の末尾に新しい行が追加されました。
File_1.txt 8208ad321576b521b23b07b9ba598e5c43b03ec4172c96fdbd35a858ec205ae6
file_2.txt ee508a6e34a2383db1b177cb9527bed16ba72b47ceb4d33ab71b47a44c1d0c31
file_3.txt aaf6b8c4a95d0e8f191784943ba1ea5c0b4d4baab733efe8ceb8b35478b6afd2
私が大声で言うと、何百万もの行と何百万ものハッシュがあります。
ハッシュを生成するのにかなり長い時間がかかりました。ファイルが30台以上のハードドライブにまたがっているため、冗長ファイル検索を使用することは不可能でした。ファイル名には、ファイルが保存されているドライブが含まれています。
これでディスク容量を解放する時間です。
一度だけ発生する一意のハッシュを持つテキストファイルの行を削除したいと思います。
ハッシュが複数回発生するテキストファイルのすべての行を維持したいと思います。
答え1
awk
この2段階の解決策よりも悪いかもしれません。
awk 'NR == FNR{if ($2 in a) b[$2]++;a[$2]++; next}; $2 in b' file file
最初のステップでは、配列を使用してb
複数回発生したハッシュを追跡します。 2番目のパスでは、ハッシュ値がある場合はレコードを印刷します。b
交互に
sort -k2,2 file | uniq -f 1 -D
これには、2番目のフィールドに基づいてファイルをソートし、重複uniq
レコードを印刷するようにパイプ処理することが含まれます(比較を実行するときに最初のフィールドをスキップする方法-f 1
)。入力ファイルのサイズを考慮すると、これはリソース集約的である可能性があります。