awk传递一个变量

时间:2014-02-22 16:05:48

标签: unix awk solaris-10

我在bash shell脚本中遇到awk问题。在下面的代码片段中,我在awk中传递一个变量var_awk用于正则表达式。我们的想法是将行放在正则表达式之上,但下面的echo不显示任何数据

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

2 个答案:

答案 0 :(得分:3)

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

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

或只是

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

答案 1 :(得分:3)

试试这个:

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