我有以下格式的文件-
datecolumn1 datecolumn2
20140202 20180113
20140202 20180113
20140202 20180113
20131202 20180113
20140331 20180113我想减去3-2美元才能找到总天数。产出如下-
20180113 20180115 3.请帮助使用awk命令。
发布于 2018-01-15 07:36:26
遵循awk可能会帮助您在相同的日期之间的天数差异(格式,您已张贴在您的帖子)。此外,这段代码也是在GNU awk中创建和测试的。
TZ=PST awk '
FNR>1{
split($1,date,"");
split($2,date1,"");
print (mktime(date1[1] date1[2] date1[3] date1[4]" " date1[5] date1[6]" " date1[7] date1[8] " " "00 00 00")\
-mktime(date[1] date[2] date[3] date[4]" " date[5] date[6]" " date[7] date[8] " " "00 00 00"))\
/(24*60*60);
}' Input_file发布于 2018-01-15 10:51:44
使用GNUawk、mkdate和FIELDWIDTHS来分离日期部分。由于$4是一个空格,因此在mktime中它被滥用为一个空格,因为它比" "更短(:
$ awk '
BEGIN{ FIELDWIDTHS="4 2 2 1 4 2 2" }
{
print $0,(mktime($5 $4 $6 $4 $7 " 0 0 0")-mktime($1 $4 $2 $4 $3 " 0 0 0"))/86400
}' file
datecolumn1 datecolumn2 0
20140202 20180113 1441
20140202 20180113 1441
20140202 20180113 1441
20131202 20180113 1503
20140331 20180113 1384.04 # wut?
20180113 20180115 2(我不太确定20180113 20180115是否应该像示例中那样生成3,或者按照数学指令生成2。)
发布于 2018-01-15 14:24:36
$ cat tst.awk
function secs(d) { return mktime(substr(d,1,4)" "substr(d,5,2)" "substr(d,7)" 0 0 0") }
{ print $1, $2, int((secs($2) - secs($1)) / (24 * 60 * 60)) }
$ awk -f tst.awk file
datecolumn1 datecolumn2 0
20140202 20180113 1441
20140202 20180113 1441
20140202 20180113 1441
20131202 20180113 1503
20140331 20180113 1384请注意,上面是一个近似的天数差,但它没有准确地解释DST。我只是使用它,因为你似乎对这个近似很满意,但是如果你想要这个结果是准确的,你需要一个不同的时间计算,包括使用strftime("%j")作为开始日期,该年的最后一天减去那个值(得到那年剩下的天数),每年的最后一天在开始日期和结束日期之间,以及一年的最后一天。
https://stackoverflow.com/questions/48257629
复制相似问题