Ваша проблема в том, что вы передаете слишком много данных в date
с помощью xargs
. Кроме того, вы не передаете дополнительную текстовую строку в конце, чтобы сделать ее частью вывода.
Было бы лучше сделать всю операцию в скрипте awk
. Как в GNU awk
, так и в mawk
есть функции для основных манипуляций с отметками времени :
{
YYYY = substr($1, 1, 4) # year
mm = substr($1, 5, 2) # month
dd = substr($1, 7, 2) # day
HH = substr($1, 9, 2) # hour
MM = substr($1, 11, 2) # minute
SS = substr($1, 13, 2) # seconds
sss = substr($1, 15, 3) # fractional seconds
text = substr($1, 18) # the rest
tm = mktime(sprintf("%s %s %s %s %s %s", YYYY, mm, dd, HH, MM, SS))
printf("%s.%s %s\n", strftime("%Y-%m-%dT%H:%M:%S", tm, 1), sss, text)
}
Это выделяет различные компоненты входной временной метки в различные переменные, используя substr()
. Затем время Unix вычисляется с использованием mktime()
(. Предполагается, что входное время находится в местном часовом поясе ), и оно преобразуется в строку временной метки (UTC )в соответствующем формате с использованием strftime()
.
Обратите внимание, что доли секунды(sss
в коде )никогда не являются частью вычислений времени, а вместо этого просто передаются как есть из ввода в вывод.
Запуск:
$ awk -f script.awk file
2019-10-14T14:16:53.042 nmd
2019-10-14T14:16:53.052 egc
2019-10-04T06:19:01.490 egc
2019-10-04T06:19:01.493 nex
2019-10-04T06:19:01.497 nex
2019-10-04T06:19:02.531 nex
2019-10-04T06:19:02.534 ksd
См. документацию по mktime()
и strftime()
в вашем руководстве awk
.
Согласно википедииhttps://en.wikipedia.org/wiki/Signal_(IPC)SIGVTALRM отправляется по истечении процессорного времени (, т.е. «рабочего времени» )процесса. Вместо этого SIGALRM считает реальное время, измеренное секундомером :
.Сигналы SIGALRM, SIGVTALRM и SIGPROF отправляются процессу, когда истекает предел времени, указанный в вызове предшествующей функции установки аварийного сигнала (, такой как settimer ). Сигнал SIGALRM отправляется по истечении реального или часового времени. SIGVTALRM отправляется, когда истекает время ЦП, используемое процессом. SIGPROF отправляется, когда время ЦП, используемое процессом и системой от имени процесса, истекает.