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 

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

 i-xxx1a1a : running i-xxx1a1b : running 

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

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

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

  • Grep строка из файла
  • Как отформатировать результаты grep?
  • Форматирование вывода grep при сопоставлении с несколькими файлами
  • Остановить grep после одного результата в Solaris
  • Печать определенной строки с awk с вывода df -h
  • какую команду я буду использовать, чтобы увидеть все строки из файла, начиная с строки, которую я нашел с помощью grep
  • Найти-grep для списка файлов .tex?
  • Как grep наиболее часто встречающиеся сообщения об ошибках в файле журнала unix
  • One Solution collect form web for “awk – grep несколько строк и печать определенным образом”

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

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

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

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