我正在尝试制作一个awk文件可执行文件。我写了剧本,做了chmod +x filename
。这是代码:
#!/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
添加变量时:
pick1 50
我收到回复:
-bash: /home/petersone/bin/pick1: /bin/awk: bad interpreter: No such file or directory
我确信有一些简单的事情我搞砸了,但我根本无法弄清楚它是什么。我该如何解决这个问题?
答案 0 :(得分:5)
从命令行运行以下命令:
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
此处讨论:Invoking a script, which has an awk shebang, with parameters (vars)
该程序的工作,测试版本:
#!/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
}
答案 1 :(得分:3)
实际上这种形式更受欢迎:
#! /bin/awk -E
男人告诉:
-E与-f类似,但是,这是最后一个处理选项,应该与#一起使用!脚本,特别是对于CGI应用程序,以避免从URL传递命令行中的选项或源代码(!)。此选项禁用命令行变量赋值