Как запустить zgrep с несколькими условиями AND?

Вопрос или проблема

Я знаю, как это сделать с помощью grep, но команда не работает с zgrep.

grep -E 'Pattern1.*Patter2' fileName

Я использую zgrep для поиска шаблонов внутри файла .json.gz.
Поскольку файлы слишком большие, я хочу использовать zgrep для OBOE шаблона1 И шаблона2, порядок не имеет значения.

Это возможно?

Я предполагаю (но это действительно неясно), что вы хотите найти строки, в которых присутствуют оба шаблона1 и шаблон2, но в любом порядке.

Прямое решение — это zcat FileName | grep -E pattern1 | grep -E pattern2, но это означает, что весь декомпрессированный файл будет передан через первый канал.

Если zgrep действительно обрабатывает это, и количество вхождений pattern1 в файле ограничено, тогда zgrep -E pattern1 | grep -E pattern2 будет работать. (Если pattern2 наиболее редкий, возможно, вам следует поменять их местами.)

Решение, которое предлагает @mashuptwice в ответе, будет работать, но в зависимости от сложности, связанной с pattern1 и pattern2, это может быть трудно ввести.

И не отвечая на вопрос: я хотел искать две строки в любом порядке (но не ограничиваясь памятью) и обнаружил, что perl -ale 'print if (/pattern1/ && /pattern2/)' (большинство языков программирования позволяют что-то подобное, но мне нравится perl) — это хорошее решение. (В вашем случае вам придется обрабатывать декомпрессию в скрипте.)

grep не имеет логического оператора И. Тем не менее, возможно добиться того же результата, используя оператор ИЛИ с помощью регулярных выражений:

zgrep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

Ответ или решение

Чтобы выполнить поиск с использованием команды zgrep, соответствующий нескольким условиям "AND" для сжатых файлов, таких как .json.gz, вам потребуется воспользоваться возможностями регулярных выражений, поскольку самой команды "AND" в grep или zgrep не существует.

Решение Ключевых Задач

  1. Введение в zgrep: zgrep – это инструмент для поиска в сжатых файлах (например, используя gzip). Он позволяет работать с файлами без необходимости их распаковки. Это особенно полезно, когда вы имеете дело с большими файлами, содержащими множество данных.

  2. Проблема поиска с несколькими условиями: Ваша задача заключается в том, чтобы находить строки, которые содержат как pattern1, так и pattern2 (в любом порядке) в одном и том же .gz файле.

  3. Использование регулярных выражений: Поскольку grep и его производные не предоставляют логического оператора "AND", вы можете использовать регулярные выражения для достижения этих целей. Как указано в комментарии, вы можете сформулировать вашу команду следующим образом:

    zgrep -E 'pattern1.*pattern2|pattern2.*pattern1' файл.json.gz

    В данном случае, это регулярное выражение ищет строки, которые содержат pattern1 перед pattern2 или наоборот; такая конструкция используется для имитации "AND" условия.

Дальнейшее Оптимизация

  • Подбор редких паттернов: Если один из паттернов встречается намного реже, имеет смысл сначала использовать его в регулярном выражении, чтобы сузить входящий поток данных до более управляемого объема. Например:

    zgrep -E 'pattern2.*pattern1|pattern1.*pattern2' файл.json.gz
  • Работа с большим объемом данных: Если перед вами стоит задача поиска в огромных файлах, возможно, использование zcat с последующей фильтрацией через grep или awk может быть уместным, хотя это потребует больше ресурсов.

Альтернативные Решения

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

zcat файл.json.gz | perl -ne 'print if /pattern1/ && /pattern2/'

Этот фрагмент кода распечатает строки из распакованного файла, которые содержат оба паттерна. Важно отметить, что такой подход требует временного использования большего объема оперативной памяти, так как весь файл будет сначала распакован.

Заключение

Таким образом, осуществление поиска с несколькими условиями "AND" при использовании zgrep возможно через применение регулярных выражений. Убедитесь, что вы строите ваши регулярные выражения с учетом порядка и редкости паттернов, чтобы оптимизировать процесс поиска в сильно сжатых файлах.

Оцените материал
Добавить комментарий

Капча загружается...