найти сумму, кратную 3 и 5 от 1 до 1000 в awk - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь выучить awk, задавая вопросы по проекту Эйлера.

Вот мой код. Я не уверен, почему он зависает. пожалуйста посоветуйте

$ awk '{ sum=0
> for (i=3; i<=1000; i++){
> if ((i % 3 == 0) || (i % 5 == 0)) 
> sum+=i
> }
> print sum }'

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Поместите все это в блок BEGIN:

awk 'BEGIN { sum=0
    for (i=3; i<=1000; i++){
    if ((i % 3 == 0) || (i % 5 == 0)) 
    sum+=i
    }
    print sum }'
1 голос
/ 16 марта 2011

У вас есть 2 вопроса здесь

  1. Обычно Awk обрабатывает строку за исключением кода в блоке BEGIN или END

  2. Awk может читать из STDIN при подключении к каналу ИЛИ, как объясняет SiegeX, когда вы даете fileName в качестве ввода.

Это должно исправить это для вас.

$ awk 'END{ 
    sum=0
    for (i=3; i<=1000; i++){
        if ((i % 3 == 0) || (i % 5 == 0)) 
        sum+=i
    }
    print sum 
}' /dev/null

/ dev / null - это допустимое имя файла, которое не содержит данных. Итак, основной цикл в awk запускается. Затем программа распознает «больше нет данных, время запустить блок END»

Надеюсь, это поможет.

1 голос
/ 16 марта 2011

awk, очень похоже на sed, работает при вводе либо через STDIN, либо через имя файла. Вы не предоставили такой информации.

То, что вы хотите, выглядит примерно так:

$ echo | awk '{sum=0; for (i=3; i<=1000; i++){if ((i % 3 == 0) || (i % 5 == 0))sum+=i}print sum}'

Обратите внимание, что я передал вывод echo (по сути, просто перевод строки) в awk, чтобы он мог выполнить ваш цикл хотя бы один раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...