0

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

说我有

Y=113

我想浏览一个文件(大文件),如果变量 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 

我什么都得不到。(即使我在命令行上尝试也是这种情况)我做错了什么?

4

2 回答 2

5

变量不会在awk. /y/总是意味着匹配单个字符y

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

于 2013-10-17T00:03:41.757 回答
4

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

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

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

于 2013-10-17T02:20:21.097 回答