计算两个文件数据之间的日期时间差异

计算两个文件数据之间的日期时间差异

我有两个文件 File1 和 File2,File1 的数据如下

"Start Date & Time" = 1804030000

和 File2 的数据如下

"End Date & Time" = 1804030400

两个文件的行数相同,几乎为 300K 行。现在我想通过减去(结束日期和时间(文件2)-开始日期和时间(文件1))来计算时间差,并将结果逐行存储在新文件中。

两个文件中的日期时间格式如 (yymmddhhmm)。

答案1

一个小的可执行文件:busybox能够使用 -D 选项解析日期格式。
文件日期的格式是%y%m%d%H%M

$ busybox date -uD %y%m%d%H%M -d "1804040400"
Wed Apr  4 04:00:00 UTC 2018

在 awk 中使用它:

$ awk 'BEGIN{  a="busybox date -uD %y%m%d%H%M +%s -d " }
         { b=a $6  ; b | getline sd ; close(b)
           b=a $NF ; b | getline ed ; close(b)
           print(ed,sd,ed-sd)
         }' < <(paste infile[12])

1522814400 1522713600 100800

注意:使用该-u选项将避免一些 DST 和局部影响。大多数情况下,它不会改变最终的差异,因为两个日期命令都是在相同的环境 TZ 下执行的。

答案2

我会使用awk并首先将Start Date & Time和转换End Date & Time为有效的日期date命令可以理解这种格式yymmdd HH:mm,然后将每个转换为时代计算差异的时间

$ awk '{endDateInEpoch="date -d""\""substr($NF,1,6)" "substr($NF,7,2)":"substr($NF,9,2)"\""" +%s";
        endDateInEpoch |getline endDateInEpoch;close(endDateInEpoch); 

        startDateInEpoch="date -d""\""substr($6,1,6)" "substr($6,7,2)":"substr($6,9,2)"\""" +%s";
        startDateInEpoch |getline startDateInEpoch;close(startDateInEpoch);

        sec=endDateInEpoch-startDateInEpoch; sec*=(sec)?1:-1; print sec" seconds"
}' <(paste file[12])
100800 seconds

请注意,我首先paste file[12]粘贴两者文件1文件2并排,结果如下所示,然后将其传递给awk输入,其中$NF指向最后一个字段1804040400,如下所示结束日期和时间字段 #61804030000开始日期和时间使用空格作为字段分隔符,这是awk默认的FS F产量S迭代器:

"Start Date & Time" = 1804030000        "End Date & Time" = 1804040400

相关内容