grep большой список против большого файла

grep большой список против большого файла

15.10.2013 04:12:07 Просмотров 36 Источник

В настоящее время я пытаюсь grep

Но это займет целую вечность!

Существуют ли более эффективные подходы к этой проблеме?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/19380925/grep-a-large-list-against-a-large-file#comment90624264_19380925
Чтобы найти все строки внутри файла, можно запустить grep в цикле FOR: unix.stackexchange.com/a/462445/43233

Ответы - grep большой список против большого файла / grep a large list against a large file

fedorqui 'SO stop harming'

Используйте grep -f

От grep -f the_ids.txt huge.csv > output_file :

-f FILE, --file=файл

Получить шаблоны из файла, по одному на строку. Пустой файл содержит ноль паттерны, а значит, и совпадений никаких. (- f определяется POSIX.)

Если вы предоставите некоторые образцы входных данных, возможно, мы даже сможем улучшить состояние man grepнемного больше.

Тест

grep
Является ответом!
devnull

15.10.2013 04:14:23

Попробуй

grep -f the_ids.txt huge.csv

Кроме того, поскольку ваши шаблоны кажутся фиксированными строками, предоставление опции-Fможет ускорить grep.

   -F, --fixed-strings
          Interpret PATTERN as a  list  of  fixed  strings,  separated  by
          newlines,  any  of  which is to be matched.  (-F is specified by
          POSIX.)
codeforester

10.03.2017 09:47:09

grep -f filter.txt data.txtстановится неуправляемым, когда filter.txtбольше, чем пара тысяч строк, и поэтому не является лучшим выбором для такой ситуации. Даже при использовании grep -f, мы должны иметь в виду несколько вещей.:

  • используйте -w, если первый файл содержит строки, а не Шаблоны
  • используйте -Fдля предотвращения частичных совпадений, не используя опцию-w

В этом посте есть большое обсуждение этой темы ( -xна больших файлах):

И этот пост говорит о grep -f:


Таким образом, лучший способ обработки -xдля больших файлов-это:

Соответствие всей линии:

grep -f

Сопоставление определенного поля во втором файле (в данном примере используется разделитель ',' и поле 2):

awk 'FNR==NR {hash[$0]; next} $0 in hash' filter.txt data.txt > matching.txt

и для grep -f:

Соответствие всей линии:

grep -vf

Сопоставление определенного поля во втором файле (в данном примере используется разделитель ',' и поле 2):

awk 'FNR==NR {hash[$0]; next} !($0 in hash)' filter.txt data.txt > not_matching.txt
Dr. Alex RE

22.01.2020 11:39:14

Вы можете получить значительное ускорение поиска с помощью ugrep, чтобы соответствовать строкам в the_ids.txtв вашем большом huge.csv-файл:

ugrep -F -f the_ids.txt huge.csv

Это работает и с GNU grep, но я ожидаю, что ugrep будет работать в несколько раз быстрее.

Закрыть X