awk - 複数行をgrepし、特定の方法で印刷します。

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 "インスタンス|ステータス" file.txt awk '{Print $0}'

ベストアンサー1

awkを使用できます。

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

これは、対応するSTATEが常にINSTANCEの後に現れると仮定します。また、インスタンスに状態がない場合は、インスタンス全体をスキップします。

おすすめ記事