我是awk的新手,希望在shell脚本中使用awk在我的自动化管道中选择ami名称
{"us-west_ami" :"ami-123" }
我想选择" ami-123"并传递新的工作。
我尝试使用print $ NF,但它没有选择最后一个值。
答案 0 :(得分:4)
如果是json格式,请使用正确的工具,例如: jq
:
kent$ jq '."us-west_ami"' <<<'{"us-west_ami" :"ami-123" }'
"ami-123"
答案 1 :(得分:1)
print $NF
确实选择了最后一个字段,但首先需要定义记录和字段分隔符(RS
和FS
)。在这种情况下,最简单的方法是使用Gnu awk并定义FPAT
:
$ awk 'BEGIN{FPAT="\"[^\"]+\""}{print $NF}' file
"ami-123"
有关FPAT
的详细信息,请参阅this。
答案 2 :(得分:1)
grep
不是解析json
的正确工具,但仍然可以使用给定的输入
$ grep -oP '"us-west_ami"(\s+)?:\K[^,}]*' <<< '{"us-west_ami" :"ami-123" }'
"ami-123"
保存在变量
中$ myvar=$(grep -oP '"us-west_ami"(\s+)?:\K[^,}]*' <<<'{"us-west_ami" :"ami-123" }')
$ echo "$myvar"
"ami-123"