Преобразование даты и времени в эпоху с использованием данных по каналу awk

У меня есть лог-файл с разделителями табуляции, который имеет дату и время в формате "2011-07-20 11:34:52" в первых двух столбцах:

Пример строки из файла журнала:

2011-07-20  11:34:15    LHR3    1488    111.111.111.111 GET djq2eo454b45f.cloudfront.net    /1010.gif   200 -   Mozilla/5.0%20(Windows%20NT%206.1;%20rv:5.0)%20Gecko/20100101%20Firefox/5.0 T=F&Event=SD&MID=67&AID=dc37bcff-70ec-419a-ad43-b92d6092c9a2&VID=8&ACID=36&ENV=demo-2&E=&P=Carousel&C=3&V=3

Я пытаюсь преобразовать дату и время в эпоху, используя только awk:

cat logfile.log | grep 1010.gif | \
awk '{ print $1" "$2" UTC|"$5"|"$10"|"$11"|"$12 }' | \
awk 'BEGIN {FS="|"};{system ("date -d \""$1"\" +%s" ) | getline myvar}'

Таким образом, это дает мне некоторый способ, в том смысле, что в конце концов я получаю менее трех тысяч раз - однако я просто получаю выходные данные системной команды - где, поскольку я действительно хочу заменить $1 временем эпохи.

Я стремлюсь к следующему выводу:

<epoch time>|$5|$10|$11|$12

Я пытался просто использовать:

cat logfile.log | grep 1010.gif |  awk '{ print d };'  "d=$(date +%s -d"$1")"

Но это просто дает мне пустые строки.

Какие-нибудь мысли.

Спасибо

1 ответ

Решение

Предполагается, что gawk не может выполнять перевод часовых поясов, строго по местному времени.

... | gawk '
      BEGIN {OFS = "|"}
      {
          split($1, d, "-")
          split($2, t, ":")
          epoch = mktime(d[1] " " d[2] " " d[3] " " t[1] " " t[2] " " t[3])
          print epoch, $5, $10, $11, $12
      }
'
Другие вопросы по тегам