高效干净的 awk 变量导出
Efficient and clean awk variable export
有了这个 variable/String 计算:
RES={"message":"Got an invalid (or empty) URL"}404
我将两部分分开(在“}”的两边)这样做:
CODE=`echo $RES | awk 'BEGIN {FS="}"}{print }'`
RES=`echo $RES | awk 'BEGIN {FS="}"}{print "}"}'`
这让我成功了:
CODE=404
RES={"message":"Got an invalid (or empty) URL"}
你能想出一种更简洁、更有效的方法吗?
例如,我想做这样的事情:
echo $RES | awk 'BEGIN {FS="}"} { CODE=; RES=;}'
我知道这很牵强,但你明白我的意思。
您可以使用 shell 的字符串操作来做到这一点,并节省数百万 CPU 循环来分叉和执行 awk:
$ 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) 手册部分 "Parameter Expansion"。
如果您有空闲的 CPU 周期,您可以使用 read/awk 组合
IFS="|"; read RES CODE < <(echo {"message":"Got an invalid (or empty) URL"}404 | awk -F"}" '{print "}|"}');
当然,你可以将IFS设置为一些不可见的字符,使其更健壮。
有了这个 variable/String 计算:
RES={"message":"Got an invalid (or empty) URL"}404
我将两部分分开(在“}”的两边)这样做:
CODE=`echo $RES | awk 'BEGIN {FS="}"}{print }'`
RES=`echo $RES | awk 'BEGIN {FS="}"}{print "}"}'`
这让我成功了:
CODE=404
RES={"message":"Got an invalid (or empty) URL"}
你能想出一种更简洁、更有效的方法吗?
例如,我想做这样的事情:
echo $RES | awk 'BEGIN {FS="}"} { CODE=; RES=;}'
我知道这很牵强,但你明白我的意思。
您可以使用 shell 的字符串操作来做到这一点,并节省数百万 CPU 循环来分叉和执行 awk:
$ 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) 手册部分 "Parameter Expansion"。
如果您有空闲的 CPU 周期,您可以使用 read/awk 组合
IFS="|"; read RES CODE < <(echo {"message":"Got an invalid (or empty) URL"}404 | awk -F"}" '{print "}|"}');
当然,你可以将IFS设置为一些不可见的字符,使其更健壮。