AWK:传递两个参数和奇怪的错误

时间:2016-12-27 16:36:47

标签: bash shell awk

我已经对grep -c ^str file进行了awk实现,我希望从shell脚本中传递filestr个参数。我使用awk -v两次传递参数但我收到awk: cannot open var1 (No such file or directory)错误。 我无法绕过它,我已经尝试了将近一个小时。 我的代码:

read -p "Give me a file name " file
read -p "Give me a string " str
awk -v var1="$file" -v var2="$str" 'BEGIN{print var1; print var2}{/^var2/}' var1 | 
awk '{if ($0 != "/s") {count++}} END {print count}'

1 个答案:

答案 0 :(得分:2)

应该是:

awk -v var1="$file" -v var2="$str" 'BEGIN{print var1; print var2}{/^var2/}' $file

awk变量只能在awk代码中加入(在本例中由单引号分隔),而不是 shell 级别,其中var1表示无效。

请注意,var2值只是斜杠 /^var2/之间的文字字符串,而是使用$0 ~ "^"var来访问var2值。

事实上,您的awk代码可以重写为:

awk -v var="$str" '$0 ~ "^"var && $0 != "/s"{count++}END{print count}' $file