awk - синтаксическая ошибка и неопределенное регулярное выражение - PullRequest
0 голосов
/ 16 мая 2019

У меня есть эта 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 ]

3 голосов
/ 16 мая 2019

Это не программа awk, это скрипт оболочки, содержащий команду awk. Программа 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 голос
/ 16 мая 2019

Хотя вы можете использовать bash или shhebang, как #!/bin/bash и т. Д., Ваш awk-код должен работать в нем. Если вы хотите использовать awk один раз, попробуйте удалить пробел между shebang и путем awk, например -> #!/usr/bin/awk -f один раз. Обратите внимание, что я на мобильном телефоне, поэтому не проверял его.

Также удалите awk ' из своего кода, вам не нужно заключать свой код в awk '..........', как это приятно напоминать @oguz ismail.

...