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

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

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

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

 18:23:24 18:20:20 

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

  • Сравните два раза в формате HH: MM: SS - ksh
  • Отправка текста из сценария на экран
  • Чтение каталога в сценарии оболочки
  • Как убить команду, выполненную из скрипта?
  • Shell Script: захватывать строку в середине текста, иногда в начале
  • Использование grep с шаблоном, который содержит переменную, подлежащую расширению
  • Может кто-нибудь уточнить этот сценарий Bash
  • Извлечь часть строки в сценарии bash
  • 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]}' 
    Interesting Posts

    Escape закрывает круглые скобки из URL с помощью firefox -remote

    Могу ли я использовать раздел FAT для / дома?

    Добавить команду «закончена» после использования определенной команды

    Как найти и заменить текст во всех открытых файлах LibreOffice?

    Переключение источника и адресата (или отмена операции mv, cp)

    Список репозиториев из частного реестра докеров

    Как сделать `head` и` tail` на вход с нулевым ограничением в bash?

    Разве $ HOME не является местом расположения домашнего каталога пользователя?

    Возможные проблемы при перемещении Linux-дисков с одного оборудования на другое

    Найти количество поклонников в ноутбуке

    Как надежно и прозрачно отслеживать выполнение процесса

    арифметическая операция со столбцами в текстовом файле

    Linux mint зависает во второй учетной записи – не может обрабатывать разворот указателя NULL ядра в (null)

    Просмотр разрешения / владельца полного дерева каталогов

    Как я начинаю начинать с tmux?

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