变量传递-v在awk中不起作用

时间:2013-10-17 00:00:09

标签: bash shell awk

在shell脚本中我试图将变量传递给awk:

说我有

Y=113

我想通过文件(bigfile),如果变量Y在一行上匹配,则打印几列。

如果我使用

awk  '{for(i=1;i<=NF;i++){if($i~/113/){print $1, $2, $3, $4}}}' < bigfile > x_113_list

我得到了理想的结果

但是,如果我尝试

Y=113
awk -v y="$Y" '{for(i=1;i<=NF;i++){if($i~/y/){print $1, $2, $3, $4}}}' < bigfile > x_"$Y"_list 

我一无所获。 (即使我在命令行上尝试也是这种情况)我做错了什么?

2 个答案:

答案 0 :(得分:5)

变量不会在awk中的正则表达式中替换。 /y/始终表示匹配单个字符y

您可能想要做的是使用index功能,例如:if (index($i, y) != 0 ...

答案 1 :(得分:4)

只需在y周围放下正斜杠:

{if($i~y){print $1, $2, $3, $4}}

〜/ y /匹配字符y,~y匹配变量y,这似乎是你想要的。