从Finish TIME值中减去Start TIME值,并在Unix文件中将值作为新列添加到CSV文件中

问题描述 投票:0回答:1

我有一个CSV文件(从SQL查询输出)。它具有在不同列中给出的开始时间和结束时间值。我需要获得开始时间和结束时间的差异,并根据差异值生成HTML报告。为此,我想要包含一个新列,它将保存“完成时间” - “开始时间”的输出。列如下。时间格式采用以下格式

START TIME: 2018-11-08 01:45:39.0
FINISH TIME:2018-11-06 06:48:20.0

我使用下面的代码,但我不确定,它是否返回正确的值。任何有关这方面的帮助将不胜感激。

以下是我的CSV文件的前3行

DESCRIPTION,SCHEDULE,JOBID,CLASSIFICATION,STARTTIME,FINISHTIME,NEXTRUNSTART,SYSTEM,CREATIONDATETIME,
DailyClearance,Everyday,XXXXXX, Standard,2018-11-08 01:59:59.0,2018-11-08 02:00:52.0,CAK-456,018-11-08 04:28:18,
Miscellinious,Everyday,XXXXXX, standart,2018-11-08 02:59:59.0,2018-11-08 03:29:39.0,2018-11-09 03:00:00.0,CAT-251,2018-11-08 04:28:18,

这是我的尝试

  awk 'NR==1 {$7 =  "DIFFMIN"} NR > 1 { $7 = $5 - $6} 1' <inputfile.csv
shell
1个回答
0
投票

这可能对您有所帮助。这个想法是使用具有时间功能的GNU awk。

awk 'BEGIN{FS=OFS=","}
     (NR==1){print $0 OFS "DURATION"; next}
     { tstart = $5; tend = $6
       gsub(/[-:]/," ",tstart); tstart=mktime(tstart)
       gsub(/[-:]/," ",tend);   tend  =mktime(tend)
       $(NF+1)=tend-tstart;
       print
     }'

这应该添加额外的列。时间将以秒表示。

我们的想法是选择两列并将它们转换为自纪元(1970-01-01T00:00:00)以来的秒数。这是使用mktime函数完成的,该函数需要一个YYYY MM DD hh mm ss形式的字符串。这就是我们首先进行替换的原因。一旦我们获得了开始和结束时间以来的秒数,我们可以减去它们以获得持续时间(以秒为单位)。

注意:在夏令时期间可能会出现一些问题。这取决于系统的设置。

注意:忽略亚秒级精度。

© www.soinside.com 2019 - 2024. All rights reserved.