调用的脚本,其具有AWK认领,使用的参数(VARS)(Invoking a script, whic

2019-07-17 22:03发布

我有我有这样定义awk脚本:

#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }

我已经保存为columns ,并chmod +x倒是它。 我想调用它,以便startend的定义,因为它穿越了一个文件。 我想这应该工作:

cat some_file | columns -v start=2

但事实并非如此。 救命!

Answer 1:

尝试使用:

#!/usr/bin/awk -f

当翻译



Answer 2:

ENV是处理这个问题的最简单的方法:

#!/usr/bin/env -S awk -f

添加更多的选择,并确保与你的论点无干扰,和awk的参数:

#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
    # delete argv[1], which == ENVIRON[_]
    delete ARGV[1]
} # rest of my awk program

作为ENV有POSIX标准,这shbang应该让你周围的整个unixen非标准shbang实现的困难。

编辑

写过此之后我意识到,“-S”是一个非POSIX兼容的FreeBSD ENV扩展 。 所以外壳包装可能是要走的就是那样,不幸的。



Answer 3:

下面是这个问题的答案 -

#!/bin/awk -f 


文章来源: Invoking a script, which has an awk shebang, with parameters (vars)