Bash 使用awk计算时差
我有以下input.txt文件。我需要计算$2和$3的时间差,并以小时为单位打印时间差Bash 使用awk计算时差,bash,shell,awk,Bash,Shell,Awk,我有以下input.txt文件。我需要计算$2和$3的时间差,并以小时为单位打印时间差 P1, 2016-05-30 00:11:20, 2016-05-30 04:36:40 P2, 2016-05-30 00:07:20, 2016-05-30 04:32:31 我有以下代码,但看起来小时数显示不准确。请帮忙 awk -F, '{gsub(/[-:]/," ",$2);gsub(/[-:]/," ",$3); d2=mktime($3
P1, 2016-05-30 00:11:20, 2016-05-30 04:36:40
P2, 2016-05-30 00:07:20, 2016-05-30 04:32:31
我有以下代码,但看起来小时数显示不准确。请帮忙
awk -F, '{gsub(/[-:]/," ",$2);gsub(/[-:]/," ",$3);
d2=mktime($3);d1=mktime($2);
print $1","(d2-d1)/3600,"hrs";}' input.txt
我得到的输出是这样的
P1,4.42222 hrs
P2,4.41972 hrs
但它应该显示出一种不同
4:25:20小时
4:25:11小时
提前感谢如果您想以HH:MM:SS语法打印秒数,您需要自己进行计算。如果您想打印,使用
printf
将非常有用,例如,4:02:30而不是4:2:30。比如说,
secs = d2 - d1;
printf "%s, %d:%02d:%02d hrs.\n", $1, int(secs/3600), int(secs/60)%60, secs%60
你想用hh:mm:ss格式打印差异?是的,出于好奇,我想用hh:mm:ss格式打印输出,你怎么会想到awk会猜到?mktime的结果只是一个数字。是否有其他解决方案可供使用?
$ cat tst.awk
BEGIN { FS=",[[:space:]]+"; OFS="," }
function dt2secs(dt) { return mktime(gensub(/[-:]/," ","g",dt)) }
function secs2hms(s) { return sprintf("%d:%02d:%02d hrs",s/(60*60),(s/60)%60,s%60) }
{ print $1, secs2hms(dt2secs($3)-dt2secs($2)) }
$ awk -f tst.awk file
P1,4:25:20 hrs
P2,4:25:11 hrs