在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
我一无所获。 (即使我在命令行上尝试也是这种情况)我做错了什么?
答案 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,这似乎是你想要的。