删除大文本文件中包含在其他大文本文件中找到的字符串的行 - 文件已排序

删除大文本文件中包含在其他大文本文件中找到的字符串的行 - 文件已排序

尝试删除一个大文件中包含另一个大文件中列出的字符串的行时仍然遇到问题。

  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]

它适用于排序文件和非常大的文件 - 但它仅适用于删除重复行 - 不适用于删除包含字符串的行。

我对两个大文件进行了排序,以便我正在搜索的字符串位于每一行的开头:

文本文件:

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

字符串文件

  AAAAA
  CCCCC

谢谢。

答案1

为什么你不爆发$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

现在 /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

相关内容