awk-语法错误和未终止的正则表达式

时间:2019-05-16 06:05:17

标签: bash awk sh

我有这个awk程序

#! /usr/bin/awk

awk '{num = $1
        for (div = 2; div * div <= num; div++) {
            if (num % div == 0)
                break
        }
        if (num % div == 0)
                printf "Smallest divisor of %d is %d\n", num, div;
        else
                printf "%d is prime\n", num;
}'

当我运行它时,它会给我这个错误消息

awk: cmd. line:1: ./blabla.awk
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: ./blabla.awk
awk: cmd. line:1:   ^ unterminated regexp

我已经检查过我是否使用了正确的解释器,但仍然无法正常工作。

2 个答案:

答案 0 :(得分:3)

那不是awk程序,那是包含awk命令的shell脚本。 awk程序如下所示:

#! /usr/bin/awk -f

{num = $1
        for (div = 2; div * div <= num; div++) {
            if (num % div == 0)
                break
        }
        if (num % div == 0)
                printf "Smallest divisor of %d is %d\n", num, div;
        else
                printf "%d is prime\n", num;
}

也就是说,它将直接包含awk代码,而不是调用awk。

答案 1 :(得分:1)

尽管您可以像#!/bin/bash那样使用bash或sh shebang,但您的awk代码应该可以在其中使用。如果您想一次坚持使用awk,请尝试删除shebang和awk路径之间的空间,例如-> #!/usr/bin/awk -f  一旦。请注意,我在移动设备上,因此未对其进行测试。

还要从代码中删除awk ',根据@oguz ismail不错的提示,您不必将代码放在awk '..........'中。