Helpers - компьютеры, интернет, программирование

Как выполнить grep/sed/awk и получить следующие пару строк до определенного шаблона

У меня возникли трудности с захватом нескольких строк из текстового файла. Например, скажем, у меня есть следующий текст в файле:

A I have a cat
B I have a dog
C I have a mouse
X I have a monkey
B I have a rat
T I have a cat
C I have a deer
X I have a turkey

Я пытаюсь найти все строки, содержащие слово «кошка», и если в предложении есть «А» в качестве первой буквы, я хотел бы получить следующие несколько строк (включая строку, которая соответствует шаблону «кошка») пока я не встречаю букву «X» как первую букву строки.

Так, например, приведенный выше текстовый файл должен распечатать:

A I have a cat
B I have a dog
C I have a mouse

(распечатывает, пока не увидит X)

Примечание. Строка «У меня есть кошка» не должна совпадать, потому что, хотя в ней есть кошка, она не начинается с буквы «А».

Я попытался найти справку, но ничего не смог найти в распечатке строк, пока не будет сопоставлен определенный шаблон. Самое близкое, что я мог найти, было

awk '/cat/ {for(i=0; i<=5; i++) {getline; print}}' filename

но это выводит определенное количество строк. Я хочу, чтобы он распечатывался, пока не увидит следующий шаблон, который является "X"


  • Если вы когда-либо задумывались об использовании getline, прочитайте awk.info/?tip/getline, чтобы понять, почему это почти всегда неправильный подход и как надежно реализовать его в тех редких случаях, когда это правильный подход. 21.04.2016
  • Спасибо за совет @EdMorton 21.04.2016

Ответы:


1

Использование sed вместо awk:

$ sed -n '/^A.* cat/,/^X/{/^X/d;p;}' data
A I have a cat
B I have a dog
C I have a mouse
$
  • -n — не печатать по умолчанию,
  • /^A.* cat/ — из строки, начинающейся с A и содержащей cat после пробела (настройте в соответствии с определениями cat; например, будет подбираться A I visited the catacombs),
  • /^X/ — до строки, начинающейся с X,
  • {/^X/d; — удалить любую строку (единственную), начинающуюся с X, и перейти к обработке следующей строки,
  • p;} — напечатать строку.

Как показано, он будет работать с BSD sed и GNU sed; GNU sed не требует последней точки с запятой.

21.04.2016
  • Вот еще один sed способ выборочной печати: sed -n '/^A.*cat/,/^X/{/^X/!p}' file 21.04.2016

  • 2
  • Удивительно!! Спасибо :) 21.04.2016
  • Пожалуйста. Вас также может заинтересовать stackoverflow.com/a/18409469/1745001. 21.04.2016
  • Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

    Почему объяснимость так важна прямо сейчас?
    По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

    ИИ для чайников: руководство для начинающих по пониманию будущего технологий
    Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..