【问题标题】:Convert datetime in to epoch using awk piped data使用 awk 管道数据将日期时间转换为纪元
【发布时间】:2011-10-12 18:32:53
【问题描述】:

我有一个制表符分隔的日志文件,前两列的日期时间格式为“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}'

所以这让我得到了某种方式,因为它让我的纪元最后少了三个 000 - 但是我只是得到系统命令的输出 - 因为我真的想用纪元时间替换 $1。

我的目标是以下输出:

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

我试过只使用:

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

但这只会给我空白行。

任何想法。

谢谢

【问题讨论】:

    标签: date awk


    【解决方案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
          }
    '
    

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 2018-04-24
      • 2011-12-06
      • 2012-09-06
      • 2012-11-08
      • 2019-01-15
      • 2012-07-29
      • 2022-08-04
      相关资源
      最近更新 更多