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 '{打印$0}'

答案1

你可以只使用 awk:

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

这假设相关的 STATE 总是出现在 INSTANCE 之后。此外,如果实例缺少状态,它将跳过整个实例。

相关内容