Unix 使用awk指定输出顺序

Unix 使用awk指定输出顺序,unix,awk,Unix,Awk,我有一个名为testfile的文件,包含以下内容: {"items":[{"ogit\/_created on":1413388512511,"\/environmentType":"PROD","\/soxRelevant":"true","\/environmentName":"dbVertical"}]} 我使用下面的awk命令获取与soxRelevant、environment type和environment name相关的值 cat test file | tr -d '"' |

我有一个名为testfile的文件,包含以下内容:

{"items":[{"ogit\/_created on":1413388512511,"\/environmentType":"PROD","\/soxRelevant":"true","\/environmentName":"dbVertical"}]}
我使用下面的awk命令获取与soxRelevant、environment type和environment name相关的值

cat test file | tr -d '"' | awk 'BEGIN {RS=","; FS=":"; ORS=",";} /soxRelevant/ {print $2}; /environmentType/ {print $2}; /environmentName/ {print $2};'
结果如下

PROD,true,dbVertical,
但是,我希望SOXrelated输出首先是环境类型,然后是环境名称,如awk命令中所指定:

我希望输出为:

true, PROD, dbVertical

如何执行此操作?

您可以将元素推送到数组中,然后在结束块中打印它们:

awk 'BEGIN {RS=ORS=","; FS=":"}
     /soxRelevant/ {a[1]=$2} 
     /environmentType/ {a[2]=$2} 
     /environmentName/ {a[3]=$2}
     END{for(n=1;n<=3;++n)print a[n]}'
awk'BEGIN{RS=ORS=“,”FS=“:”}
/soxRelevant/{a[1]=$2}
/environmentType/{a[2]=$2}
/环境名称/{a[3]=$2}

结束{for(n=1)Note是好的,注意到你从来没有接受过任何答案。如果你想让别人帮助你,你就应该这么做。我怎么接受答案,我看不出这个选项。你可以点击答案旁边的复选标记来把它从空洞切换到绿色。看看你有没有疑问。这是可行的,但是有没有办法打印出来呢?不使用for循环的hole数组,类似于a[*]?不在awk中,不。您可以在perl中执行类似的操作,尽管我建议在这种情况下使用JSON解析器采用完全不同的方法。