Unix 传递变量的awk

Unix 传递变量的awk,unix,awk,solaris-10,Unix,Awk,Solaris 10,我正在努力解决bashshell脚本中的awk问题。在下面的代码片段中,我为awk中的正则表达式传递了一个变量var_awk。其思想是在正则表达式上方获取行,但下面的echo不显示任何数据 echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'` 我无法为正则表达式注册,虽然当我打印正则表达式时,它正在打印,但当不按预期执行正则表达式时 if [ $GE == "HBCA" ] || [ $G

我正在努力解决bashshell脚本中的awk问题。在下面的代码片段中,我为awk中的正则表达式传递了一个变量var_awk。其思想是在正则表达式上方获取行,但下面的echo不显示任何数据

echo `ls -ltr $date*$f* | /usr/xpg4/bin/awk -v reg=$var_awk '/reg/ {print $0}'`
我无法为正则表达式注册,虽然当我打印正则表达式时,它正在打印,但当不按预期执行正则表达式时

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

您不能以这种方式在正则表达式中使用变量。您需要执行以下操作:

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

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

    • 您不能以这种方式在正则表达式中使用变量。您需要执行以下操作:

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

      /usr/xpg4/bin/awk -v reg="$var_awk" '$0~reg'
      
      • /
        内部,变量reg将用作文字
      • 引用shell变量
      试试这个:

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

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

      非常感谢各位。堆垛溢出的岩石。我的问题已经解决了。很高兴知道//是用于文字而不是变量的。@user3341078很高兴您的问题解决了。在这里,点击答案旁边的复选标记,你可以表示感谢。非常感谢各位。堆垛溢出的岩石。我的问题已经解决了。很高兴知道//是用于文字而不是变量的。@user3341078很高兴您的问题解决了。单击答案旁边的复选标记,您可以在此处表示感谢。通常,您应该使用
      $(…)
      符号,而不是在命令周围使用反勾号。通常,您应该使用
      $(…)
      符号,而不是在命令周围使用反勾号。