Преобразовать временную метку unix в hh: mm: ss: SSS (где SSS – миллисекунды) в AWK

Как преобразовать временную метку unix в hh: mm: ss: SSS (где SSS – миллисекунды) в AWK.

Например:

echo 1456478048306 > time cat time | awk ....... > readable_time_format 

  • Как использовать awk для чтения данных между всеми частыми временными интервалами
  • Разница между `ls -c` и` ls -t`
  • Преобразовать временную метку Unix в читаемый человеком формат в AIX
  • Найти файлы между двумя папками в linux?
  • Можете ли вы прочитать обновленное mtime, но при чтении содержимого они еще не обновлены?
  • Найти изображения с одинаковой временной отметкой exif
  • Как определить, действительно ли cp -u скопировал файл?
  • Нужно преобразовать столбец timestamp unix epoch в каждую строку с помощью sed или awk
  • 2 Solutions collect form web for “Преобразовать временную метку unix в hh: mm: ss: SSS (где SSS – миллисекунды) в AWK”

    date GNU:

     d=1456478048306 s=${d%???} ms=${d#"$s"} date -d "@$s" +"%F %T.$ms %z" # or: date -d "$s.$ms" '+%F %T.%3N %z' 

    С date BSD:

     date -r "$s" +"%F %T.$ms %z" 

    С GNU awk и последними версиями mawk (начиная с 1.3.4 20121129 ):

     echo 1456478048306 | awk '{ print strftime("%F %T." substr($0,length-2) " %z", substr($0, 1, length-3))}' 

    Для переносимости perl может быть вашим лучшим выбором:

     echo 1456478048306 | perl -MPOSIX -lne ' print strftime "%F %T.$2 %z", localtime $1 if /(.+)(.{3})/' 

    Здесь, давая мой предпочтительный более обычный и менее двусмысленный формат:

     2016-02-26 09:14:08.306 +0000 

    но, конечно, вы можете настроить формат strftime по своему усмотрению.

    Если вы не заботитесь о часовых поясах и секундах секунд, и по какой-то причине ваш awk не поддерживает strftime , вы можете рассчитать его напрямую:

     awk '{ t=$1;sss=(t % 1000); t/=1000; ss=(t%60); t/=60; mm=(t%60); t/=60; hh=(t%24); printf("%02d:%02d:%02d.%03d\n",hh,mm,ss,sss); }' 
    Linux и Unix - лучшая ОС в мире.