将时间转换为纪元时间并找到2个时间戳之间的差异

时间:2018-04-17 09:19:18

标签: linux bash shell awk

我想grep开始和结束时间,并获得时间戳之间的差异

输入文件:Logs.txt

11.04.2018 09:21:35 aaaaa: start_time
13.04.2018 02:22:35 aaaaa: end_time
11.04.2018 10:45:00 aaaaa: start_time
11.04.2018 11:00:00 aaaaa: end_time

我写的脚本如下:

awk -F"[.: ]" '/start/{printf "%s:%s:%s,", $4,$5,$6} /start/{start=($4 * 3600) + ($5 * 60) + $6} /end/{print (($4 * 3600) + ($5 * 60) + $6)-start;start=""}' log.txt

我得到的输出是:

09:21:35,-25140
10:45:00,900

但这是错误的,因为它只是花时间,而不是考虑日期。那么我该如何解决这个问题呢。如何使用awk来使用EPOCH时间。

1 个答案:

答案 0 :(得分:2)

如果你的awk支持mktime()函数,gawk扩展,请尝试类似:

awk -F"[.: ]" '
/start/ {start = mktime($3" "$2" "$1" "$4" "$5" "$6);
    printf("%s:%s:%s,", $4, $5, $6);
}
/end/ {end = mktime($3" "$2" "$1" "$4" "$5" "$6);
    print end - start;
}' log.txt

如果要添加条件以确保日志文件包含开始和结束时间,请执行以下操作:

awk -F"[.: ]" '
/start/ {start = mktime($3" "$2" "$1" "$4" "$5" "$6);
    hms = sprintf("%s:%s:%s,", $4, $5, $6);
}
/end/ {end = mktime($3" "$2" "$1" "$4" "$5" "$6);
    if (start) {
        print hms end - start;
        start = "";
    }
}' log.txt