创build一个awk文件可执行文件

我很抱歉这个简单的问题,但我似乎无法弄清楚什么是错的,或者在这个网站或linuxforum上find类似的问题。 (我是相当新的Linux和awk)我试图做一个awk文件的可执行文件。 我写了脚本,并做了chmod + x文件名。 这里是代码:

#!/bin/awk -v 'TOPNUM = $1 ## pick1 - pick one random number out of y ## main routine BEGIN { ## set seed srand () ## get a random number select = 1 +int(rand() * TOPNUM) # print pick print select }' 

当我尝试运行该程序并为TOPNUM添加一个variables时:

pick1 50

我得到的回应是:

-bash:/ home / petersone / bin / pick1:/ bin / awk:错误的解释器:没有这样的文件或目录

我确信有一件简单的事情,我搞砸了,但我根本搞不清楚它是什么。 任何帮助表示赞赏。 谢谢。

从命令行运行以下命令:

 which awk 

这将打印AWK的路径,可能是/usr/bin/awk 。 纠正第一行,你的脚本应该工作。

另外,你的脚本在开始和结束时不应该有单引号字符。 您可以从命令行运行AWK,并以引用字符串的形式传递脚本,也可以在文件中编写脚本,并使用#!/usr/bin/awk第一行,以及文件中的命令。

另外,你的脚本的第一行是不会正常工作的。 在AWK中,设置代码需要位于BEGIN块中, $1是对输入行中第一个字的引用。 您需要使用ARGV[1]来引用第一个参数。

http://www.gnu.org/software/gawk/manual/html_node/ARGC-and-ARGV.html

正如@TrueY所指出的那样,第一行应该有一个-f

 #!/usr/bin/awk -f 

这里讨论: 使用参数(变量)调用awk shebang的脚本,

工作,测试版本的程序:

 #!/usr/bin/awk -f ## pick1 - pick one random number out of y ## main routine BEGIN { TOPNUM = ARGV[1] ## set seed srand () ## get a random number select = 1 +int(rand() * TOPNUM) # print pick print select } 

其实这个形式更可取:

 #! /bin/awk -E 

男人说:

-E然而,类似于-f,这个选项是最后一个处理过的,应该使用#! 脚本,尤其是CGI应用程序,以避免从URL传递命令行上的选项或源代码(!)。 该选项禁用命令行变量赋值