Вычисления в оболочке Unix

Попробуйте сопоставить точку:

$ rm -r.*.swp

Надеюсь, это решит вашу проблему.

2
07.11.2019, 14:22
2 ответа
c= echo $a | awk -F : '{print ($1 * 32140800) + ($2 * 2678400) + ($3 * 86400) + ($4 * 3600) + ($5 * 60) }'

Вы пропустили здесь подстановку команд. Это просто запустит конвейер echo | awk, установив для cпустое значение в среде echo.

Вы использовали подстановку команд ниже, в duration=$(echo "$d - $c"), это то, что вам нужно и здесь. то есть

c=$(echo "$a" | awk ...)

(Обратите внимание, что вокруг знака =нет пробела, это то, что отделяет простое присваивание от команды, см. Пробелы в присваиваниях переменных в сценариях оболочки)

Кроме того, глядя на числа в сценарии awk, вы, кажется, имеете 31 -дня в месяце и, соответственно, 372 -дня в году, что может быть, а может и не быть тем, что вам нужно. Если в вашем вводе тоже есть секунды, скрипт awk их не использует. (Должен ли быть + $6в конце? )В обеих командах также есть $aвместо $aи $b.

duration=$(echo "$d - $c")

Это просто установит durationв строку типа5678 - 1234(с фактическими значениями dи c), поскольку echoпросто печатает то, что было задано, а не выполняет арифметические действия.

duration=$((d-c))

Это должно работать, чтобы сделать вычитание.

5
27.01.2020, 21:51

Какую оболочку вы используете? Арифметика не реализована в старой -школе /bin/sh, но прекрасно работает с bash :

.
~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800
2
27.01.2020, 21:51

Теги

Похожие вопросы