web-dev-qa-db-ja.com

ファイル名とハッシュを含むテキストファイル-重複するハッシュを含む行を抽出する

以下の形式を使用して、ファイル名とsha-256ハッシュを含む大きなテキストファイルを生成しました-ハッシュの後の各行の終わりに新しい行。

file_1.txt 8208ad321576b521b23b07b9ba598e5c43b03ec4172c96fdbd35a858ec205ae6

file_2.txt ee508a6e34a2383db1b177cb9527bed16ba72b47ceb4d33ab71b47a44c1d0c31

file_3.txt aaf6b8c4a95d0e8f191784943ba1ea5c0b4d4baab733efe8ceb8b35478b6afd2

私が大きいと言うとき-それは何百万もの行にあります-何百万ものハッシュ。

ハッシュを生成するのにかなりの時間がかかりました-重複ファイル検索プログラムを使用してファイルが30を超えるハードドライブにまたがっているため、ファイル名にはファイルが保存されているドライブが含まれています。

ディスクスペースを解放する時が来ました。

一度だけ発生する一意のハッシュを持つテキストファイルの行を削除したいと思います。

2回以上発生するハッシュを持つテキストファイルのすべての行を保持したいと思います。

4
speld_rwong

この2パスのawkソリューションよりも悪い結果になる可能性があります

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を介して比較しながら最初のフィールドをスキップします)。入力ファイルのサイズを考えると、これは非常に多くのリソースを消費することが判明する可能性があります

1
iruvar