【问题标题】:awk display variable with environment contentawk 显示带有环境内容的变量
【发布时间】:2017-12-27 16:10:37
【问题描述】:

我从系统中获取一个返回字符串的变量,例如:

$VARIABLE/dir/text.file

我尝试使用gsub,但我遗漏了一些东西:

onstat -c | grep ^MSGPATH | awk 'gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}'

返回错误:

awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}
awk: cmd. line:1:                        ^ syntax error
awk: cmd. line:1: gsub (/$INFORMIXDIR/, ${INFORMIXDIR}) {print $2}
awk: cmd. line:1:                                     ^ 0 is invalid as number of arguments for gsub

可能是什么问题?

【问题讨论】:

  • 你有一些 onstat -c 产生的输出吗?
  • 但是你想在 awk 中打印变量值吗?还是什么?
  • 它返回:$INFORMIXDIR/tmp/online.log 之后我需要使用该值,INFORMIXDIR 是一个环境变量。
  • 而您需要在 AWK 中打印 $INFORMIXDIR/tmp/online.log 的环境值,对吧?
  • 是的,我想在我的脚本中使用这个值

标签: variables awk string-substitution


【解决方案1】:

因为 awk 主体是单引号,所以不能扩展 shell 变量。安全地执行此操作的方法是使用 -v 选项将值传递给 awk:

... | awk -v dir="$INFORMIXDIR" 'gsub (/\$INFORMIXDIR/, dir) {print $2}'

注意你必须在正则表达式中转义$,因为它是一个特殊的正则表达式字符(意思是“字符串结束”)

【讨论】:

  • 也许可以避免正则表达式转义并改用[$]
猜你喜欢
  • 2013-05-03
  • 2018-06-08
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2013-06-02
相关资源
最近更新 更多