LINUX.ORG.RU

AWK: Функция умножения возвращает ноль или ничего

 , , , ,


0

1

Всем доброго времени суток. Имеется код следующего вида:

BEGIN {
     if (ARGV[1] == "+") {
       print ARGV[2] + ARGV[3]
     }
     else if (ARGV[1] == "-") {
         print ARGV[2] - ARGV[3]
     }
     else if (ARGV[1] == "*") {
         print ARGV[2] * ARGV[3]
     } /* Приблизительное расположение проблемы */
     else if (ARGV[1] == "/") {
         print ARGV[2] / ARGV[3]
     }
     else {
         print "Unknown operator"
     }
   }

По задумке выполняться должен примерно так:

awk -f script.awk * 2 2
4

root@localhost:~# 

Проблема заключается в том, что при попытке выполнить умножение через этот код - не возвращается ничего.

Изначально в строке с умножением кода стояло «=» заместо «==», и при этом всегда возвращался ноль.

Что я сделал не так?

P. S. Попытки экранировать звёздочку символом обратным слэшем заканчивались выводом

awk: test.awk:8: warning: escape sequence "\*" treated as plain "*"

Умоляю, помогите :c



Последнее исправление: projectorist (всего исправлений: 2)

математика

Вспомнилось простенькое:

$ echo "2*2" | bc
4

Это я так, не в тему, не обращай внимания. )

krasnh ★★★★
()

Звёздочку надо экранировать, всё же

yoghurt ★★★★★
()
Ответ на: комментарий от projectorist

Попытки экранировать звёздочку символом обратным слэшем заканчивались выводом

$ awk -f script.awk \* 2 2
4

Задача любопытная, может кто в теме и окажет содействие.

krasnh ★★★★
()

Ты запускаешь этот код из шелла, который раскрывает звездочку в список файлов.
Хз, попробуй одинарные кавычки.
Преподу своему передай, что он дебил.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от krasnh

можно и без bc

$ echo $((2 * 2))
4
$ expr 2 \* 2
4

но это тоже в качестве дополнительных вариантов ;)

imb ★★
()
Ответ на: комментарий от krasnh

Премного благодарен, проблема решена сим способом :)

projectorist
() автор топика
Ответ на: комментарий от thesis

Благодарствую, сей способ тоже оказался работоспособен :)

projectorist
() автор топика
Ответ на: комментарий от krasnh

В пакете арча нет, проверил на всякий в busybox, тоже нет.

Соболезную.

Это где ж такой ключик.

 % uname -srm
FreeBSD 13.1-RELEASE-p1 amd64
 % bc -v
bc 5.2.2
Copyright (c) 2018-2021 Gavin D. Howard and contributors
Report bugs at: https://git.yzena.com/gavin/bc

This is free software with ABSOLUTELY NO WARRANTY.
mord0d ★★★★★
()
Ответ на: комментарий от projectorist

Ну… для импотентов есть следующая конструкция:

 % bc <<EOF
2*2
EOF
4

В скриптах можно делать так:

some_var="2*2"
bc <<EOF
${some_var}
EOF
mord0d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.