我很抱歉这个简单的问题,但我似乎无法弄清楚什么是错的,或者在这个网站或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传递命令行上的选项或源代码(!)。 该选项禁用命令行变量赋值