Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将时间转换为历元时间,并找出两个时间戳之间的差异_Linux_Bash_Shell_Awk - Fatal编程技术网

Linux 将时间转换为历元时间,并找出两个时间戳之间的差异

Linux 将时间转换为历元时间,并找出两个时间戳之间的差异,linux,bash,shell,awk,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,$

我想
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-time如果您的awk支持mktime()函数(一个笨拙的扩展),请尝试以下操作:

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

如果您的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

非常感谢,你能告诉我如何在这个句子中使用条件语句吗。例如,仅当脚本同时具有开始时间和结束时间时,我才需要运行该脚本?有什么帮助吗@齐奥尼在回答窗格中添加了一个选项。现在,当且仅当日志文件具有开始和结束时间集时,脚本才会输出结果。我希望我能回答你的要求。非常感谢你,你能告诉我如何在这个句子中使用条件语句吗。例如,仅当脚本同时具有开始时间和结束时间时,我才需要运行该脚本?有什么帮助吗@齐奥尼在回答窗格中添加了一个选项。现在,当且仅当日志文件具有开始和结束时间集时,脚本才会输出结果。我希望我能回答你的要求。