別の大きなテキストファイルで見つかった文字列を含む大きなテキストファイルの行を削除する - ファイルの並べ替え

別の大きなテキストファイルで見つかった文字列を含む大きなテキストファイルの行を削除する - ファイルの並べ替え

別の大きなファイルにリストされている文字列を含む1つの大きなファイルから行を削除しようとすると、まだ問題があります。

  grep -vwFf file1 file2 - FAILS due to memory exhaustion.

私は以下を使用しました:

  comm -23 file1 file2

[https://stackoverflow.com/questions/4366533/remove-lines-from-file-which-appear-in-another-file][1]

ソートされたファイルと非常に大きなファイルに対して機能しますが、文字列を含む行を削除するのではなく、重複した行を削除する場合にのみ機能します。

私が探している文字列が各行の先頭にあるように、2つの大きなファイルを並べ替えました。

テキストファイル:

  AAAAA blah blah blah
  AAAAB blas blas blas
  CCCCC sdf sf sdf

文字列ファイル

  AAAAA
  CCCCC

ありがとうございます。

ベストアンサー1

$file1複数の小さなファイル(/ tmpまたはmktempを使用)をバーストしてから、各ファイルを繰り返して$file1grepするのはどうですか?パターン$file1ファイル()の理想的なサイズはシステムによって異なります。

ここでは各行$file1に 1000 行があります。

i=1 while [ $i -lt $count ] do sed -n "$i,$(($i +1000))p" file1.txt >> /tmp/file${1}.txt i=$(( $i + 1001)) done

これで、/ tmpにfile.txtというファイルがたくさんあるので、次のことができます。

for file1 in $(ls /tmp/file*.txt) do grep -vwFf $file1 file2 done

mktempを使用する方が安全です。

TEMP_DIR=$(mktemp)

for file1 in $(ls ${TEMP_DIR}/file*.txt) do grep -vwFf $file1 file2 done

おすすめ記事