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