题
代码
#!/usr/bin/awk
# Sed and AWK by O'Reilly (p.179)
# Example of what should happen: factorial 5 gives
# factorial
# Enter number: 3
# The factorial of 3 is 6
BEGIN {
printf("Enter number: ")
}
$1 ~ /^[0-9]+$/ {
# assign value of $1 to number & fact
number = $1
if (number == 0)
fact = 1
else
fact = number
for (x = 1; x < number; x++)
fact *=x
printf("The factorial of %d is %g\n", number, fact)
exit
}
# if not a number, prompt again.
{ printf("\nInvalid entry. Enter a number: ")
}
我运行命令,但未成功过
./factorial.awk
我得到
/usr/bin/awk: syntax error at source line 1
context is
>>> <<< ./factorial.awk
/usr/bin/awk: bailing out at source line 1
什么错误信息的意思吗?
解决方案
我认为,问题是,你正在编写脚本,并传递它awk执行。以下是一个外壳脚本,因此 #! /bin/sh
, ,所以它将会传递给外壳(Bourne兼容的,在这种情况下)。
#! /bin/sh
awk 'BEGIN { printf("Hello world!\n"); exit }'
她的爆炸(#!) 线告诉前解释其口译员传递的脚本中执行。你必须通过剧本的 awk
翻译所以你需要电话 awk
明确。这个假设 awk
是在你的道路的地方。
以下,但是,是 awk
脚本。
#! /usr/bin/awk -f
BEGIN {
printf("Hello world!\n");
exit
}
她邦调用 awk
并将脚本输入。你不需要明确地援引 awk
在这种情况下你没有引述的整个剧本,因为它是直接通到 awk
.
想想她-爆炸的话说 拿什么跟她-邦、追加的名称文件,并执行它. 维基百科 介绍了使用情况很好,其中包括一些共同的方法来解决 路径来解释 问题。
其他提示
可能地一个哑的答案,但在我的终端我将不得不输入:
./factorial.awk
,其中文件是factorial.awk。
您可以编辑PATH环境变量,包括。但./应该工作得很好,我认为。和添加。到$ PATH可以证明是在某些情况下非常危险的地方,你会运行的代码,你没有想到。
这是否工作??
编辑:
./ factorial.awk -bash:./factorial.awk:在/ usr / bin中/ GAWK:坏解释器:没有这样的文件或目录
这是说,它运行该文件,但无法找到该程序GAWK。 请输入“其中呆子”,然后“其中的awk”。
是您的第一行应该是:
#!/usr/bin/awk
另外,只是逗我,输入:
sudo apt-get install gawk
这将确保你确实有GAWK您的系统上。
EDIT2: 我接过来一看你的代码,这就是我现在有。我除去两个引号和破折号。
#!/usr/bin/gawk
# I think we do not need these (p.179) so I comment them out, since I do not know where else to put them.
# The same bug occurs also with them.
#fact = number
#for (x = number -1 ; x > 1; x--)
# fact *= x
awk # factorial: returns factorial of user-supplied number
BEGIN {
printf("Enter number: ")
}
$1 ~ /^[0-9]+$/ {
# assign value of $1 to number & fact
number = $1
if (number == 0)
fact = 1
else
fact = number
#loop to multiply fact*x until x = 1
for (x = number - 1; x > 1; x--)
fact *= x
printf("The factorial of %d is %g\n", number, fact)
#exit -- saves user from typing ^-d
exit
}
# if not a number, prompt again.
{ printf("\nInvalid entry. Enter a number: ")
}
可以是它不是那么复杂。
#!/ USR /斌/ AWK --------->#!/ USR /斌/ AWK -f
检查是否存在文件/usr/bin/gawk
;如果没有,用awk的路径或用于GAWK正确的位置。
另外,你使脚本可执行?
和也,你有没有在当前目录在PATH?
我拿到剧本在Ubuntu和OS X的工作运行
awk -f factorial.awk
看来,虽然书上说的,所以你不能运行脚本如下:
./factorial.awk
下面是一个递归版本:
#!/usr/bin/awk -f
function f(x) {
if (x <= 1) return 1
return (f(x-1) *x)}
BEGIN {
printf("Enter number: ")
}
$1 ~ /^[0-9]+$/ {
printf("The factorial of %d is %d\n", $1, f($1))
exit
}
{ printf("\nInvalid entry. Enter a number: ")
}