要在AWK命令中求和时间(00:00:00)
我有一个awk命令来计算另一个文件中的时间,它和数字一起工作,但当用小时来计算时,它就不起作用了 范例要在AWK命令中求和时间(00:00:00),awk,Awk,我有一个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 alib
> 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类似于以下内容:
$ 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
基本上,您需要将所有时间组件转换为秒,将记录相加并再次将其分解为组件。您也可以使用,但这不允许所有的hh:mm:ss输出,因为时间>24小时将转换为日期
编辑:
添加了按公司名称对所有upp所有值进行求和和和分组的版本:
$ awk '
{
split($2,a,":") # separate hs, ms and sses
b[$1]+=a[1]*3600+a[2]*60+a[3] # sum them up as as seconds
}
END {
for(i in b) {
h=int(b[i]/3600) # separate hs
m=int((b[i]-3600*h)/60) # and ms
s=b[i]-3600*h-60*m # and sses
printf "%s %d:%02d:%02d\n",i,h,m,s # output
}
}' file
alibab 240:00:00
amazon 73:02:00
ebay 5:00:00
另一个使用空格和:作为分隔符的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
4+5=8? 请在您的问题中添加示例输入和您对该示例输入的期望输出。亲爱的Cryus,我是新来的,但我已经举了两个例子thereamad@amad-VirtualBox:~$cat e1.txt亚马逊| 1易趣| 2阿里巴巴| 3易趣| 1亚马逊| 5amad@amad-VirtualBox:~$cat e2.txt亚马逊| 1:02:00易趣| 2:50:00阿里巴巴| 240:00:00易趣| 3:04:00亚马逊| 72:00:00amad@amad-VirtualBox:~$awk-F'|'$1==“易趣”{sum+=$2}结束{print sum}'e1.txt 3amad@amad-VirtualBox:~$awk-F'|'$1==“易趣”{sum+=$2}结束{print sum}'e2.txt 5amad@amad-VirtualBox:~$非常感谢您的及时回复,但当我运行时,我遇到以下错误:awk:line 1:语法错误或附近+=awk:line 1:extra')'awk:line 1:extra')'awk:line 1:语法错误或附近=重新加载页面并剪切粘贴脚本。之前有一个bug。谢谢James,我在运行您的命令后删除了24:00:00的值结果是0:00:00我不知道怎么了亲爱的James非常感谢,我已经用下面的命令解决了这个问题。请欣赏它awk-F'|'$1==“KRK”{split($2,a,“:”)#单独的hs,ms和sses b+=a[1]*3600+a[2]*60+a[3]#以秒计#END{h=int(b/3600)#分开hs m=int((b-3600*h)/60)#和ms s=b-3600*h-60*m#和ss printf“%d:%02d:%02d\n”,h,m,s#output}fiber1.txt 3:38:00非常感谢亲爱的我是新来的,我如何投票增加你的分数,或者我想用金钱奖励你,请让我知道如何与你聊天?