grep несколько шаблонов список аргументов одного файла слишком длинный
В настоящее время я ищу несколько шаблонов в файле. Файл имеет размер 90 ГБ, я ищу по определенному полю (с позиции 6-17 в каждой строке). Я пытаюсь получить все строки, которые содержат какой-либо конкретный список чисел. Текущий синтаксис, который я использую:
grep '^.{6}0000000012345|^.{6}0000000012543' somelargeFile.txt > outputFile.txt
Для небольшого числа паттернов это работает. Для большого количества паттернов я получаю ошибку "список аргументов слишком длинный".
Один из вариантов, который я пробовал, - это поиск каждого паттера отдельно (используя цикл for над шаблонами), но это потребует многократных проходов через большой файл данных(57102722 строки), что не является эффективным.
Из того, что я понимаю об ошибке "список аргументов слишком длинный", это связано с bash cmds в целом, а не конкретно с grep. Есть ли какие-либо настройки, которые можно использовать, чтобы обойти эту ошибку? Или, как вариант, какие-либо идеи о том, как это сделать с помощью awk или sed или другого инструмента?
Спасибо!
2 ответов:
Вы можете избежать этой проблемы, поместив шаблоны в файл и используя опцию командной строки
-fдля grep.Удобнее всего поместить каждую альтернативу в отдельную строку файла:
Паттерны.txt
^.\{6\}0000000012345 ^.\{6\}0000000012543Вызов
grep -f patterns.txt somelargeFile.txt > outputFile.txt
Comments