awk - grep em várias linhas e imprime de uma maneira específica

1

Eu tenho o seguinte conteúdo e um arquivo chamado 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

Agora quero imprimir a seguinte saída

i-xxx1a1a : running
i-xxx1a1b : running

Por favor, note que a linha que começa com TIMESTAMP, INSTANCES, STATE são novas linhas

Eu tentei fazer isso, mas não funcionou

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

    
por Damien-Amen 16.11.2016 / 03:54

1 resposta

3

Você pode usar o awk:

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

Isso pressupõe que o STATE relevante sempre apareça depois de INSTANCE. Além disso, se houver um STATE ausente para um INSTANCES, ele ignorará toda a instância.

    
por 16.11.2016 / 04:06