首页 > 解决方案 > 使用linux计算两个日期之间的时间差

问题描述

早上好。我有两个名为a.txt和的文本文件b.txt,其中包含以下格式的数据,如下所示

year mn dt hr:mn:sec
xxxx-xx-xx xx:xx:xx.xxxxxx

我的 a.txt 文件是

2019-01-01 00:58:49.925000
2019-01-01 01:48:39.665000


2019-01-01 15:42:18.955000

2019-01-01 18:40:49.915000
2019-01-01 18:47:00.735000

2019-01-01 21:07:49.255000
2019-01-01 21:52:29.055000
2019-01-02 03:19:54.955000
2019-01-02 07:41:27.845000
2019-01-02 18:52:32.995000

b.txt 文件包含

2019-01-01 00:58:50.565000
2019-01-01 01:48:39.915000
2019-01-01 04:09:53.705000
2019-01-01 06:28:07.515000

2019-01-01 15:43:13.455000
2019-01-01 18:40:53.255000
2019-01-01 18:47:04.005000
2019-01-01 18:47:03.975000
2019-01-01 21:07:53.725000
2019-01-01 21:52:37.195000

2019-01-02 07:41:34.255000
2019-01-02 19:41:08.865000

此外,每个文本文件(a.txt 和 b.txt)都包含 14 行,包括空格。

现在我想以a.txt-b.txt秒为单位计算每行之间的时间差(

我做了如下的事情:

#!/bin/sh
a=`cat a.txt`
b=`cat b.txt`
awk '{print $a-$b}' 

标签: linuxbashfor-loopawk

解决方案


根据对您问题的一种可能解释,将 GNU awk 用于mktime() :

$ cat tst.awk
!NF { next }
{ gsub(/[-:]/," ") }
NR==FNR {
    file1[NR] = $0
    next
}
FNR in file1 {
    diff = mktime($0) - mktime(file1[FNR])
    if ( (3 <= diff) && (diff <= 18) ) {
        print diff
    }
}

$ awk -f tst.awk a.txt b.txt
4
4
4
8
7

显然只是添加> c.txt重定向输出。

如果这不是您需要的,请编辑您的问题以阐明您的要求并根据您发布的示例输入提供预期的输出。


推荐阅读