web-dev-qa-db-ja.com

他のLARGEテキストファイルで見つかった文字列を含むLARGEテキストファイルの行を削除する-FILESSORTED

別のLARGEファイルにリストされている文字列を含むLARGEファイルの行を削除しようとしても問題が発生します。

  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

ありがとう。

2
speld_rwong

_$file1_を(/ tmp内またはmktempを使用して)多数の小さなものにバーストしてから、各_$file1_をループし、grepに使用しないのはなぜですか...パターンファイルの理想的なサイズ(_$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

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

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

1
thecarpy