Я пытаюсь обработать файл журнала почты с помощью awk, но у меня есть проблема с преобразованием метки времени в формат UTC.Как преобразовать временную метку в UTC, используя AWK
Файл ввода выглядит следующим образом:
# cat /tmp/TimeStamps1.tmp
2016-08-10T00:23:45.984558+02:00
2016-09-30T10:23:45.984558+02:00
2016-10-31T20:45:27.984558+01:00
И ожидать выход должен быть:
cat /tmp/Target
2016-08-09 22:23:45
2016-09-30 08:23:45
2016-10-31 19:45:27
Как «T» между Дата & время кажется, вопрос, я также попытался удалить его :
# cat /tmp/TimeStamps2.tmp
2016-08-10 00:23:45.984558+02:00
2016-09-30 10:23:45.984558+02:00
2016-10-31 20:45:27.984558+01:00
Сначала попробуйте с помощью системы()
awk ' {print $1" - "system("date -u +%Y-%m-%d -d" $0) } ' /tmp/TimeStamps2.tmp
date: extra operand `00:23:45.984558+02:00'
Try `date --help' for more information.
2016-08-10 - 1
date: extra operand `10:23:45.984558+02:00'
Try `date --help' for more information.
2016-09-30 - 1
date: extra operand `20:45:27.984558+01:00'
Try `date --help' for more information.
2016-10-31 - 1
Второй попробовать использовать STRFTIME()
/tmp$ awk -F',' ' {print $1" - "strftime("%Y-%m-%d %H:%M:%S", $1)} ' /tmp/TimeStamps2.tmp
2016-08-10 00:23:45.984558+02:00 - 1970-01-01 01:33:36
2016-09-30 10:23:45.984558+02:00 - 1970-01-01 01:33:36
2016-10-31 20:45:27.984558+01:00 - 1970-01-01 01:33:36
дата работает находку: дату -u +% Y-% m-% d»«% T -d "2016-08-10 00: 23: 45.984558 + 02: 00" 2016-08-09 22:23:45 – Fdv
Нет проблем с использованием GAWK, strftime и mktime. Формат аргумента, ожидаемого mktime, представляет собой строку формы «YYYY MM DD HH MM SS [DST]». Я должен буду попытаться переформатировать соответственно, любое предложение для формата [DST]? – Fdv
Это дает хорошие результаты: echo "2016-08-10 00: 23: 45.984558 + 02: 00" | awk -F ',' -v sep = \ "'{system (" date -u +% Y-% m-% dT-% T -d "sep $ 1 sep)}' 2016-08-09T-22 : 23: 45 У меня должен быть «T» в формате, это создает проблему. – Fdv