grep несколько шаблонов список аргументов одного файла слишком длинный



В настоящее время я ищу несколько шаблонов в файле. Файл имеет размер 90 ГБ, я ищу по определенному полю (с позиции 6-17 в каждой строке). Я пытаюсь получить все строки, которые содержат какой-либо конкретный список чисел. Текущий синтаксис, который я использую:



grep '^.{6}0000000012345|^.{6}0000000012543' somelargeFile.txt > outputFile.txt


Для небольшого числа паттернов это работает. Для большого количества паттернов я получаю ошибку "список аргументов слишком длинный".



Один из вариантов, который я пробовал, - это поиск каждого паттера отдельно (используя цикл for над шаблонами), но это потребует многократных проходов через большой файл данных(57102722 строки), что не является эффективным.



Из того, что я понимаю об ошибке "список аргументов слишком длинный", это связано с bash cmds в целом, а не конкретно с grep. Есть ли какие-либо настройки, которые можно использовать, чтобы обойти эту ошибку? Или, как вариант, какие-либо идеи о том, как это сделать с помощью awk или sed или другого инструмента?



Спасибо!

710   2  

2 ответов:

Вы можете избежать этой проблемы, поместив шаблоны в файл и используя опцию командной строки -f для grep.

Удобнее всего поместить каждую альтернативу в отдельную строку файла:

Паттерны.txt

^.\{6\}0000000012345
^.\{6\}0000000012543

Вызов

grep -f patterns.txt somelargeFile.txt > outputFile.txt

Попробуйте использовать оператор чередования.

grep '^.\{6\}0000000012\(345\|543\)'

Comments

    Ничего не найдено.