使用awk获取最后一个字段

时间:2018-02-01 11:39:27

标签: awk

我是awk的新手,希望在shell脚本中使用awk在我的自动化管道中选择ami名称

{"us-west_ami" :"ami-123" }

我想选择" ami-123"并传递新的工作。

我尝试使用print $ NF,但它没有选择最后一个值。

3 个答案:

答案 0 :(得分:4)

如果是json格式,请使用正确的工具,例如: jq

kent$  jq '."us-west_ami"' <<<'{"us-west_ami" :"ami-123" }'
"ami-123" 

答案 1 :(得分:1)

print $NF确实选择了最后一个字段,但首先需要定义记录和字段分隔符(RSFS)。在这种情况下,最简单的方法是使用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"