【问题标题】:AWK: Passing two arguments and weird errorAWK:传递两个参数和奇怪的错误
【发布时间】:2016-12-28 01:19:58
【问题描述】:

我已经对 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}'

【问题讨论】:

    标签: bash shell awk


    【解决方案1】:

    应该是:

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

    awk vars 只能在 awk 代码中加入(在这种情况下由单引号分隔)而不是在 var1 没有任何意义的 shell 级别。

    请注意,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 的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多