我有一个我已定义的awk脚本:

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

我已将其保存为 columns chmod + x 。我想调用它,以便在遍历文件时定义 start end 。我以为这应该有效:

cat some_file | columns -v start=2

但事实并非如此。救命啊!

有帮助吗?

解决方案

尝试使用:

#!/usr/bin/awk -f

作为翻译

其他提示

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扩展。所以shell包装器可能是要走的路,不幸就是这样。

以下是此问题的答案 -

#!/bin/awk -f 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top