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

Bash AWK:传递两个参数和奇怪的错误,bash,shell,awk,Bash,Shell,Awk,我已经实现了grep-c^str file的awk,我想从shell脚本中传递file和str参数。我使用awk-v两次来传递参数,但是我得到一个awk:cannotopenvar1(没有这样的文件或目录)错误。 我就是绕不过去,我已经试了将近一个小时了。 我的代码: 应该是: awk -v var1="$file" -v var2="$str" 'BEGIN{print var1; print var2}{/^var2/}' $file awkvars只能在awkcode(在本例中由单引号分

我已经实现了
grep-c^str file
的awk,我想从shell脚本中传递
file
str
参数。我使用
awk-v
两次来传递参数,但是我得到一个
awk:cannotopenvar1(没有这样的文件或目录)
错误。 我就是绕不过去,我已经试了将近一个小时了。 我的代码:

应该是:

awk -v var1="$file" -v var2="$str" 'BEGIN{print var1; print var2}{/^var2/}' $file
awk
vars只能在
awk
code(在本例中由单引号分隔)内部加入,而不能在shell级别加入,
var1
不表示任何内容

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

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

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

非常感谢。那么做
-v var1=“$file”
就没有意义了,对吧?绝对没有:P@Dinos_12345那好多了,谢谢!我以前的代码没有打印任何内容,即使文件中有一个以str开头的记录。这很奇怪,因为当我显式地传递变量时它会工作。原因是简单的var2值是斜杠之间的文字字符串
/^var2/
,这就是为什么我使用
$0~“^”var
awk -v var="$str" '$0 ~ "^"var && $0 != "/s"{count++}END{print count}' $file