高效干净的 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设置为一些不可见的字符,使其更健壮。