これには2つの大きなテキストファイルがあり、30mb
それぞれ1つずつ必要ですgrep
。grep -f "file01.txt" "file02.txt" > file03.txt
これを行うと、「メモリ不足」エラーが返されます。
アルファベット順に関係なく、これらのファイルをどのように比較できますか?
答え1
file01.txt
実際の内容を含まない限り一般的な表現、努力する:
grep -Ff "file01.txt" "file02.txt" > file03.txt
-F
正規表現ではなく固定文字列としてgrep
処理するように指示します。file01.txt
これにより、速度が大幅に向上し、メモリ要件が大幅に削減されます。
一般的な表現
あるいは、file01.txt
正規表現を含める場合は、それらを複数の部分に分割してgrep
各部分に個別に適用できます。
split -dn 10 "file01.txt" ./tmp-file01.
for f in ./tmp-file01.*; do grep -f "$f" "file02.txt"; done >file03.txt
上記の内容はfile01.txt
10箇所に分かれています。使用可能なメモリによっては、より多くのメモリが必要になる場合があります。
file01.txt が次の場合いいえ正規表現を作成し、-F
2行目に次を使用します。
for f in ./tmp-file01.*; do grep -Ff "$f" "file02.txt"; done >file03.txt
答え2
できません。スキーマはgrep
使い果たされたメモリにロードする必要があります。
しかし、あなたが望むなら比較するdiff
ファイルを直接(内容を整理した後)使用してみてはいかがでしょうか?
パターンごとに1行(例:MD5リスト):
while read md5; do
grep -w "$md5" file02.txt
done < file01.txt > file03.txt
もちろん、これは特に大容量file02.txt(キャッシュに合わない場合)の場合ははるかに遅いですが、file01.txtパターンのすべてのサイズで機能します。