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

Все еще возникают проблемы с попыткой удалить строки в файле LARGE, содержащем строки, перечисленные в другом файле LARGE.

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

Я использовал:

  • Извлечение списка шаблонов, которые выводятся из другой команды
  • текущий фиксированный трек в строке состояния dwm
  • Найти файлы, которые не находятся в .gitignore
  • unix: получить символы от 10 до 80 в файле
  • Есть ли опция / команда для дифференциации файлов на основе состояния копии файла в каталоге?
  • Печать непревзойденных шаблонов с использованием grep с шаблонами из файла
  •   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 для подсчета числа вхождений для каждого слова, найденного в шаблоне регулярных выражений
  • Как искать слово после определенной строки в файле в Linux?
  • Проблема с пастой и стандартным выходом в linux
  • Как получить количество заданной (диапазона) длины из строки с grep?
  • Как вычесть строки из первой строки с помощью awk?
  • разные результаты от awk и 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 - лучшая ОС в мире.