Korn Shell: показать прошедшее время в определенном формате

В файле журнала мне нужно напечатать время Истекшее в следующем формате:

"Process completed %s - Elapsed %s", <time now in HH:MM:SS format>, <difference from start date to end date in HH:MM:SS format> 

Пример:

 Process completed 23:57:59 - Elapsed 103:22:59 

Как я мог это достичь?

3 Solutions collect form web for “Korn Shell: показать прошедшее время в определенном формате”

Ksh имеет специальный параметр SECONDS который всегда содержит количество секунд с эпохи. Оценка $SECONDS в начале и в конце задания дает вам время начала и окончания, а разница – прошедшее время.

Время Unix не учитывает секунды прыжка: день в Unix-времени всегда ровно 84000 секунд. Поэтому временная арифметика по времени Unix проста.

 start=$SECONDS … end=$SECONDS elapsed=$((end - start)) printf 'Process completed %d:%02d:%02d - Elapsed %d:%02d:%02d\n' \ $((end / 3600)) $((end / 60 % 60)) $((end % 60)) \ $((elapsed / 3600)) $((elapsed / 60 % 60)) $((elapsed % 60)) 

Нравится это ( Предупреждение : чувствительный настрой теперь отводится сейчас – это старая школа ksh):

 t1=`date '+%H:%M:%S'` sleep 2 t2=`date '+%H:%M:%S'` t1h=`expr $t1 : '\(..\):.*'` t2h=`expr $t2 : '\(..\):.*'` t1m=`expr $t1 : '..:\(..\).*'` t2m=`expr $t2 : '..:\(..\).*'` t1s=`expr $t1 : '..:..:\(..\)'` t2s=`expr $t2 : '..:..:\(..\)'` hdiff=`expr $t2h - $t1h` mdiff=`expr $t2m - $t1m` sdiff=`expr $t2s - $t1s` if [ $tm1 -gt $tm2 ];then hdiff=`expr $hdiff - 1` mdiff=`expr $tm1 - $tm2` fi if [ $ts1 -gt $ts2 ];then mdiff=`expr $mdiff - 1` sdiff=`expr $sm1 - $sm2` fi if [ $hdiff -lt 10 ];then hdiff="0$hdiff" fi if [ $mdiff -lt 10 ];then mdiff="0$mdiff" fi if [ $sdiff -lt 10 ];then sdiff="0$sdiff" fi echo "Elapsed time $hdiff:$mdiff:$sdiff" 

Извините, это для bash, не заметили, что вы хотели оболочку korn до сих пор, я не могу с этим поделать, но это может дать вам основной принцип.

 StartTime=$( date +"%s" ) # do some stuff sleep 4 EndTime=$( date ) ElapsedSecs=$(( `date -d"$EndTime" +%s` - StartTime )) secs=$(( ElapsedSecs % 60 )) mins=$(( ( ElapsedSecs / 60 ) % 60 )) hrs=$(( ElapsedSecs / 3600 )) EndTimeFormated=$( date -d"$EndTime" +"%H:%M:%S" ) echo "Process completed $EndTimeFormated - Elapsed " `printf "%02d:%02d%02d\n" $hrs $mins $secs` 
  • Программирование оболочки, исключая временные файлы
  • Регулярное выражение для смешанных слов
  • Как преобразовать общий формат XML-формата в формат свойств String из XML-файла с помощью скрипта ksh
  • почему csv потребляет больше размера файла в моем скрипте unix?
  • Для скобок цикла - синтаксис типа C
  • Как преобразовать текст или символ в hex в оболочке korn
  • в то время как цикл чтения
  • scripting-Игнорирование переменной при неопределенной
  • Как перенаправить одно и то же сообщение на stdoud и stderr (без временного объекта)
  • Шаблон KSH из переменной не работает
  • В чем смысл массива $ array, не расширяющего весь массив в ksh и bash?
  • Interesting Posts

    Почему я вижу себя дважды, когда я запускаю команду?

    Доступ к гостевой системе VirtualBox через VPN

    cygwin, tail -F и быстро заполняющие / вращающиеся журналы

    SSH на Linux Debian

    Есть ли причина, по которой существуют разрешения владельца? Достаточно ли групповых разрешений?

    то, что является итоговым в выводе команды ls

    Можно ли найти диапазон физических адресов модуля DIMM?

    Печать предыдущей строки после сопоставления шаблонов с помощью sed?

    Установить установленную систему в файл tar.gz

    Возможно ли иметь xrandr в разных режимах на основе рабочего пространства?

    Отброшены пакеты в управлении трафиком, которые действительно упали?

    Высокое использование GPU перед запуском X-Server

    ssh_config: указать команду для запуска на удаленном компьютере при входе в систему

    Странное поведение док-станции после открытия максимально развернутого окна

    Скопировать скомпилированное приложение в другую систему

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