awk – grep несколько строк и печать определенным образом

У меня есть следующий контент и файл с именем file.txt

 TIMESTAMP 200 J8899 INSTANCES 19 x86_64 False i-xxx1a1a t2.medium True subnet-93b224fb hvm vpc-7b801 STATE 16 running TIMESTAMP 300 J2099 INSTANCES 18 x86_64 False i-xxx1a1b t2.medium True subnet-93b224fb hvm vpc-7b801 STATE 16 running 

Теперь я хочу напечатать следующий вывод

  • Искать только в текстовых файлах, которые не являются исходным кодом
  • Как обмениваться словами в имени файла с помощью оболочки?
  • Как я могу отфильтровать эти «Permission denied» из вывода вывода?
  • grep поиск любого числа в диапазоне
  • Сценарий оболочки читает отдельно столбцы из файла
  • Найдите шаблон без повторных чисел в egrep
  •  i-xxx1a1a : running i-xxx1a1b : running 

    Обратите внимание, что строка, начинающаяся с TIMESTAMP, INSTANCES, STATE представляет собой новые строки

    Я пробовал это делать, но это не сработало

    grep -Ew "INSTANCES | STATE" file.txt | awk '{print $ 0}'

  • Как правильно выполнить grep на выходе ldd?
  • поиск точной строки в unix
  • Как печатать строки, соответствующие шаблону с помощью grep?
  • Объединение нескольких выходов grep в переменную
  • Почему awk печатает на ненулевых строках и положительных числах
  • Как открыть grep (1p) manpage?
  • One Solution collect form web for “awk – grep несколько строк и печать определенным образом”

    Вы можете просто использовать awk:

     awk '/INSTANCES/{ thing = $5; } /STATE/ { print thing,":",$NF; }' file.txt 

    Это предполагает, что соответствующее состояние всегда появляется после INSTANCE. Кроме того, если отсутствует состояние STATE для INSTANCES, он пропустит весь экземпляр.

    Linux и Unix - лучшая ОС в мире.