高效和干净的awk变量导出

时间:2015-09-15 13:38:24

标签: bash shell awk sh

计算此变量/字符串:

RES={"message":"Got an invalid (or empty) URL"}404

我把这两部分分开(在“}”的两边)这样做:

CODE=`echo $RES | awk 'BEGIN {FS="}"}{print $2}'`
RES=`echo $RES | awk 'BEGIN {FS="}"}{print $1"}"}'`

这让我成功:

CODE=404
RES={"message":"Got an invalid (or empty) URL"}

你能想到一种干净,更有效的方法吗?

例如,我想做这样的事情:

echo $RES | awk 'BEGIN {FS="}"} { CODE=$2; RES=$1;}'

我知道这很遥远,但你可以看到我的意思。

2 个答案:

答案 0 :(得分:3)

您可以使用shell的字符串操作来执行此操作,并为分叉和执行awk节省数百万个CPU周期:

$ RES='{"message":"Got an invalid (or empty) URL"}404'
$ echo ${RES%\}*}\}
{"message":"Got an invalid (or empty) URL"}
$ echo ${RES##*\}}
404

请参阅sh(1)或bash(1)手册部分"参数扩展"详情。

答案 1 :(得分:0)

如果您有多余的CPU周期,可以使用read / awk组合

执行此操作
IFS="|"; read  RES CODE < <(echo {"message":"Got an invalid (or empty) URL"}404 | awk -F"}" '{print $1"}|"$2}');

当然,您可以将IFS设置为某个不可见的字符,以使其更加健壮。