Как вычесть два раза в оболочке

Мне нужно вычесть две строки, которые находятся в формате времени в оболочке. Формат времени: hh: mm: ss Я использовал код ниже, чтобы получить время.

cat /var/log/kern.log |grep usb |tail -2| awk '{print $3}' 

Вывод вышеуказанного кода

 18:23:24 18:20:20 

Как я могу найти разницу в секундах?

4 Solutions collect form web for “Как вычесть два раза в оболочке”

Я бы сделал еще один шаг (вдохновленный этим сообщением ):

 # => 18:23:24 --> 66204 grep usb /var/log/kern.log|tail -2|awk '{print $3}'|awk -F: '{print ($1 * 3600) + ($2 * 60) + $3 }' 

Итак, после того, как я:

 66204 66020 

Тогда вы можете:

 echo $((66204-66020)) # => 184 

Более общее решение, потому что оно работает со временем с разных дат:

 echo "18:23:24 18:20:20" | (read later_time; read former_time; former_seconds=$(date --date="$former_time" +%s); later_seconds=$(date --date="$later_time" +%s); echo $((later_seconds-former_seconds)) ) 184 

Если вы используете awk вы можете сделать это одним вызовом

 awk ' /usb/{ ("date +%s -d "$3)|getline t[++i]; } END{ print t[i-1]-t[i]; }' /var/log/kern.log 

Весь ваш трубопровод в awk без большого количества ненужных труб.
Подобно costas, но без использования каких-либо внешних команд.

 awk '/usb/{split($3,a,":");b[++x]=(a[1]*3600)+(a[2]*60)+a[3]}END{print b[x-1]-b[x]}' /var/log/kern.log 

Heres только последний бит с датами, разработанными, если вы решили сохранить трубы

  awk '{split($1,a,":");b[x++]=(a[1]*3600)+(a[2]*60)+a[3]}END{print b[0]-b[1]}' 
  • Включение подпараметров в варианты справки для правильного выполнения без getopt или getopts?
  • Есть ли способ увидеть, какой процесс вызвал сценарий оболочки?
  • Как сохранить код в скрипте
  • команды curl и grep выводятся в новую переменную
  • bash если вопрос поведения инструкции
  • Linux Mint Corners Музыкальная последовательность Ассоциативный массив
  • Как захватить форматирование текста в bash?
  • У меня возникли проблемы с просмотром, если мои имена хостов из моего файла являются либо записью A, либо псевдонимом
  • объединение n числа файлов с командой cat
  • Почему обратная косая черта преобразуется в пространство в выражении эха, если IFS = '\'?
  • Проблема использования пользовательской переменной в скрипте
  • Тело нулевого сообщения; надеюсь, что все в порядке
  • Interesting Posts

    Неверная контрольная сумма Rpmdb. Попытка установить gcc в файле док-станции CentOS 7.2.

    Поиск слов с определенными характеристиками в файле словаря

    Переименуйте файл в другой каталог, не повторяя путь

    Что означает ошибка «DMA: из пространства SW-IOMMU»?

    Запускайте ненулевой код выхода, когда я выхожу из цикла

    объединить файл с именем файла

    Установка пакета wordpress всегда требует apache?

    Настройка Samba (очень низкая скорость передачи данных)

    Как найти, с какого компьютера я подключился к текущему серверу

    'git show' не передает управляющие символы для цвета

    colordiff – как сохранить цвет при сохранении файла

    Как установить mailman, когда ему нужна более старая версия Python?

    pdflatex / lualatex, вызванный из сценария выключения, не может найти установленные пакеты

    Потоки бит каретки и поток строки в двоичном файле во время загрузки TFTP в режиме ASCII

    Возобновить сессию bash в новом TMUX или SCREEN?

    Linux и Unix - лучшая ОС в мире.