Попробуйте сопоставить точку:
$ rm -r.*.swp
Надеюсь, это решит вашу проблему.
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))
Это должно работать, чтобы сделать вычитание.
Какую оболочку вы используете? Арифметика не реализована в старой -школе /bin/sh
, но прекрасно работает с bash :
~$ a=10000000
~$ b=200
~$ echo $((a-b))
9999800