我有awk命令对另一个文件中的时间求和,它可以使用数字,但是尝试使用小时数则无法运行
示例
> cat ee.txt
amazon|4
ebay|5
alibab|10
ebay|4
amazon|5
> awk -F '|' '$1 ~ /ebay/{ sum += $2 } END{ print sum }' ee.txt
8
但是当我需要加总时间时命令不起作用
> cat ee.txt
amazon 1:02:00
ebay 2:00:00
alibab 240:00:00
ebay 3:00:00
amazon 72:00:00
> awk -F '|' '$1 ~ /ebay/{ sum += $2 } END{ print sum }' ee.txt
输出应为5:00:00
答案 0 :(得分:0)
类似这样的东西:
Royal Botanic Gardens
基本上,您需要将所有时间分量转换为秒,对记录求和,然后再次将其分解为分量。您还可以使用GNU awk's time functions,但是不允许所有hh:mm:ss输出,因为时间> 24小时会转换为日期。
修改:
添加了一个版本,用于汇总所有值并按公司名称分组:
$ awk '
/ebay/ {
split($2,a,":") # separate hs, ms and sses
b+=a[1]*3600+a[2]*60+a[3] # sum them up as as seconds
}
END {
h=int(b/3600) # separate hs
m=int((b-3600*h)/60) # and ms
s=b-3600*h-60*m # and sses
printf "%d:%02d:%02d\n",h,m,s # output
}' file
5:00:00
答案 1 :(得分:0)
使用空格和:作为分隔符的另一个awk
$ awk -F"[ :]+" ' { a[$1]+=$2*3600+$3*60+$4 } END {for(i in a){hr=int(a[i]/3600);mi=int((a[i]-hr*3600)/60);s=a[i]-3600*hr-60*mi;printf("%s %02d:%02d:%02d\n", i,hr,mi,s) }}' ee.txt
ebay 05:00:00
alibab 240:00:00
amazon 73:02:00