3

У меня есть очень большой текстовый файл (размером в несколько гигабайт), который мне нужен для поиска определенных строк. При использовании grep я получаю более 11 000 совпадений строки, но с ag я получаю примерно 1500. Вывод двух команд одинаков до момента остановки ag .

Мне известна опция -m в ag определяющая максимальное количество совпадений, но по умолчанию это 10000, поэтому проблема не в этом.

Чтобы проиллюстрировать это, вот пример того, что происходит:

$ grep -i 'string' hugefile.txt | wc -l
    11000
$ ag -i 'string' hugefile.txt | wc -l
    1500

Вывод двух команд идентичен одинаковому количеству совпадений:

$ grep -m 1500 -i 'string' hugefile.txt > grep_output.txt
$ ag --no-numbers -i 'string' hugefile.txt > ag_output.txt

$ diff grep_output.txt ag_output.txt

(files identical)

Имеет ли ag неявный максимальный размер ввода, и если да, то можно ли это изменить?

1 ответ1

0

Возможно ли, что у вас было несколько (в среднем от 6 до 7) хитов на строку?

Если это так, то вышеприведенный метод их подсчета является неправильным: он считает только строки со совпадениями, но не совпадения. Таким образом, если вы достигнете предела в 10000 совпадений уже после 1500 строк совпадений, вы получите вышеуказанный результат, и он будет правильным.

Кроме того, семантика параметров grep и ag -m кажется, отличается:

  • Для grep это максимальное количество читаемых строк: прекратить чтение файла после NUM совпадений строк.
  • Но для ag это максимальное количество совпадений: пропустить остаток файла после NUM совпадений.

Поэтому я подозреваю, что вы достигли максимального предела совпадений по умолчанию и вам нужно увеличить значение, переданное параметру -m ag .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .