Вот простой скрипт awk, который не использует никаких временных функций:
$ cat subtract.awk
{
hh1=substr($2,1,2);
mm1=substr($2,4,2);
ss1=substr($2,7,2);
hh2=substr($3,1,2);
mm2=substr($3,4,2);
ss2=substr($3,7,2);
time1=hh1*60*60 + mm1*60 + ss1;
time2=hh2*60*60 + mm2*60 + ss2;
diff=time2-time1;
printf "%s %d:%d:%d\n",$1,diff/(60*60),diff%(60*60)/60,diff%60;
}
Входные данные:
$ cat file.txt
2011-03-05 15:16:41 15:16:42
Запустите его:
$ awk -f subtract.awk < file.txt
2011-03-05 0:0:1
В качестве альтернативы , вы можете использовать mktime
:
{
date=$1
gsub(/[-:]/," ");
diff=mktime ($1" "$2" "$3" "$7" "$8" "$9) - mktime ($1" "$2" "$3" "$4" "$5" "$6);
printf "%s %d:%d:%d\n",date,diff/(60*60),diff%(60*60)/60,diff%60;
}