从Finish TIME值中减去Start TIME值,并在Unix文件中将值作为新列添加到CSV文件中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Finish TIME值中减去Start TIME值,并在Unix文件中将值作为新列添加到CSV文件中相关的知识,希望对你有一定的参考价值。
我有一个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
答案
这可能对您有所帮助。这个想法是使用具有时间功能的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
形式的字符串。这就是我们首先进行替换的原因。一旦我们获得了开始和结束时间以来的秒数,我们可以减去它们以获得持续时间(以秒为单位)。
注意:在夏令时期间可能会出现一些问题。这取决于系统的设置。
注意:忽略亚秒级精度。
以上是关于从Finish TIME值中减去Start TIME值,并在Unix文件中将值作为新列添加到CSV文件中的主要内容,如果未能解决你的问题,请参考以下文章