我有一个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
答案 0 :(得分: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
形式的字符串。这就是为什么我们首先执行替换。一旦有了从开始到结束的时间点的秒数,我们就可以减去它们来获得以秒为单位的持续时间。
注意:在夏令时期间可能会出现一些问题。这取决于您的系统设置。
注意:亚秒级精度将被忽略。