【发布时间】:2017-08-19 21:22:36
【问题描述】:
我想写一个 awk 脚本,这样
我可以直接在 bash 中运行脚本名称,而无需将 awk 作为命令名称。
如何安排输入文件名和附加参数在命令行中指定并传递到脚本中?
如果脚本,比如 myscript.awk 以 shebang 开头:
#! /usr/bin/awk -f
或
#! /usr/bin/awk
或者没有shebang?
我应该如何编写脚本来处理命令行参数,以便我可以像myscript.awk inputfile arg1 arg2 或myscript.awk arg1 arg2 inputfile 一样运行它?
应该如何处理awk的选项,比如-F'\t'?
或者有什么替代方法?
或者我应该通过在我的 awk 程序上编写一个调用 awk 的 bash 脚本来间接地做到这一点?
谢谢
【问题讨论】:
-
如果您打算直接调用而不是通过
awk -f myscript.awk调用工具,请不要将其命名为myscript.awk。 -
你的意思是把它命名为
myscript没有扩展名.awk? -
是的,我愿意。工具应该根据它们所做的事情来命名,而不是根据它们编写的语言来命名。如果你有一个用 shell(或 awk 或 python 或 perl 或 ruby 或......)编写的名为“foo”的工具,并且你决定重写在 C 中,生成的工具仍应命名为“foo”。从用户 POV 来看,应该没有明显的差异。所以不要在工具名称中添加“.awk”或“.sh”或任何其他扩展名。
-
@EdMorton 谢谢。您的建议是否取决于脚本是否包含 shebang?如果我编写一个没有 shebang 的脚本,因此必须将脚本作为其解释器的参数提供,我是否应该使用扩展名(如 .sh、.awk)来命名脚本以指示其解释器?
-
如果您正在编写一个 shell 脚本,请给它一个 shebang 并且不要包含后缀。如果您正在编写要以
awk -f script.awk等形式传递给awk 的awk(或其他工具)脚本,那么请给它一个后缀。同样,您从命令行调用的工具的名称应该与编写该工具的语言无关。
标签: awk