【问题标题】:awk passing a variableawk 传递变量
【发布时间】:2014-02-22 16:05:47
【问题描述】:

我在 bash shell 脚本中遇到了一个 awk 问题。在下面的代码 sn-p 中,我正在为 awk 中的正则表达式传递一个变量 var_awk。这个想法是在正则表达式上方获取行,但下面的回显不显示任何数据

echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'`

我无法注册正则表达式,但当我打印 reg 时,它正在打印,但当没有按预期执行正则表达式时。

if [ $GE == "HBCA" ] || [ $GE == "HBUS" ] || [ $GE == "HBEU" ]; then
        for f in `ls -ltr $date*GEN*REVAL*log|grep -v LPD | awk '{split($9,a,"_")}{print a[3]}'`; do
                echo $f
                var_awk="$date"_RESET_CALC_"$f"
                echo $var_awk
                echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'`

【问题讨论】:

  • 一般来说,您应该使用$(…) 符号而不是命令周围的反引号。

标签: unix awk solaris-10


【解决方案1】:

您不能以这种方式在正则表达式中使用变量。你需要做的:

/usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg{ print $0 }'

或者干脆

/usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg'
  • / / 中,您的变量 reg 将用作文字。
  • 引用您的 shell 变量。

【讨论】:

    【解决方案2】:

    试试这个:

    ...whatever you had already..|awk -v reg="$var_awk" '$0~reg'
    
    • 最好用引号将 shell 变量括起来,例如如果你的 var 有空格。
    • awk 中的/pattern/ 称为正则表达式常量。它不能与变量一起使用,这就是为什么它被称为constant。在这个例子中,我们需要在这里使用动态正则表达式。

    【讨论】:

    • 非常感谢大家。 stackoverflow 岩石。我的问题已经解决了。很高兴知道 // 是用于文字而不是变量。
    • @user3341078 很高兴您的问题得到解决。在这里,您可以通过单击答案旁边的复选标记来表示感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多