【问题标题】:Efficient and clean awk variable export高效干净的 awk 变量导出
【发布时间】:2015-12-11 19:12:12
【问题描述】:

计算这个变量/字符串:

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;}'

我知道这有点牵强,但你可以明白我的意思。

【问题讨论】:

    标签: bash shell awk sh


    【解决方案1】:

    如果你有空闲的 CPU 周期,你可以使用 read/awk 组合来做到这一点

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

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

    【讨论】:

      【解决方案2】:

      您可以通过 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) 手册部分“参数扩展”。

      【讨论】:

      • 完美的解决方案,我现在正在通过人来理解它。非常感谢。
      • @Bity 很高兴它对你有用。 Stackoverflow 的下一步是通过单击向下箭头下方左侧的复选符号来接受答案。接受答案也会使您的信誉提高 2 分。
      • 完成。感谢您的提示
      猜你喜欢
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2023-04-11
      相关资源
      最近更新 更多