为什么awk模式匹配不返回结果?

时间:2019-04-29 18:24:24

标签: linux bash shell unix awk

使用以下1行创建文件(x):

{"dagId":"blashj","execDate":"20190426","status":"running","isActive":true}

->返回所需值---> true

cat x | sed -e 's/[{}"]/''/g' | awk -v RS=',' -F: '/^\isActive/ {print $0}'

->为什么这不返回值?期望值--->运行中

cat x | sed -e 's/[{}"]/''/g' | awk -v RS=',' -F: '/^\status/ {print $0}'

env是RHEL7.4,GNU Awk 4.0.2

3 个答案:

答案 0 :(得分:3)

那是因为\s不匹配吗?

答案 1 :(得分:1)

我将全力支持jq,该版本应可在您的平台上使用:

jq -r '"isActive:"+(.isActive | tostring)' file

如果只需要该对象属性的值,则它可以很简单

jq -r '.status'  file

-r--raw-output将字符串直接写入标准输出,而不是将其格式化为带引号的JSON字符串

参见jq is sed for json。使用正确的工具可以节省时间。

答案 2 :(得分:1)

如果像我一样,您在工作中无权访问jq,我将使用正则表达式作为awk记录分隔符。

$ awk -F: -v RS='[{},]' '/"isActive"/{print $2}' x
true

$ awk -F: -v RS='[{},]' '/"status"/{print $2}' x
"running"