Удаление строк в текстовом файле LARGE, содержащем строку, найденную в другом текстовом файле LARGE – FILES SORTED

Все еще возникают проблемы с попыткой удалить строки в файле 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]

Он работает для отсортированных файлов и действительно больших файлов, но работает только для удаления повторяющихся строк – не удаляет строки, содержащие строку.

Два больших файла, которые у меня есть, сортируются так, что строки, которые я ищу, находятся в начале каждой строки:

текстовый файл:

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

строковый файл

  AAAAA CCCCC 

Благодарю.

  • grep строка из определенного столбца
  • Использование grep или awk
  • PCRE-regex Используйте grep для исключения группы захвата
  • grep фиксированная строка в конце строки
  • Простой способ извлечь ценность из HTML
  • Как я могу рекурсивно искать каталоги для шаблона и просто распечатывать имена файлов и номера строк
  • Как использовать sed для печати части строки, содержащей хеши (или любое альтернативное решение)?
  • Как получить количество заданной (диапазона) длины из строки с grep?
  • One Solution collect form web for “Удаление строк в текстовом файле LARGE, содержащем строку, найденную в другом текстовом файле LARGE – FILES SORTED”

    Почему вы не ломаете $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

    Linux и Unix - лучшая ОС в мире.