首页 > 解决方案 > 在 awk 脚本头中指定其他标志

问题描述

我想使用#!/bin/awk -f标题编写一个 awk 脚本文件,但我希望此脚本始终:用作字段分隔符。但由于某种原因,写作#!/bin.awk -F: -f给了我一个语法错误。我还希望这个脚本始终在同一个文件上运行,所以我也想对其进行硬编码。基本上,我想要工作的是:

#!/bin/awk -F: -f -- /etc/passwd

后面跟着一些 awk 代码

标签: bashawk

解决方案


许多系统在 shebang 行中只允许一个参数,因此空格之后的所有内容都作为一个参数传递。

但是,您FS甚至可以ARGV在脚本的BEGIN块中进行设置,如下所示:

#!/bin/awk -f              # using the #!/bin/awk -f
BEGIN {
    FS=":"                 # always use : as a field separator
    ARGC=2
    ARGV[1]="/etc/passwd"  # always run on the same file
}
$3==0 {                    # followed by some awk code
    print $1
}

运行:

$ chmod u+x program.awk
$ ./program.awk
root

推荐阅读