使用参数(vars)调用具有awk shebang的脚本
题
我有一个我已定义的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
不隶属于 StackOverflow