免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4605 | 回复: 12
打印 上一主题 下一主题

[日期时间] 问个时分秒计算的程序 [复制链接]

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-24 15:56 |只看该作者 |倒序浏览
本帖最后由 huang6894 于 2014-01-24 15:57 编辑

hi,all:
  1. 1806700                 huang6894             wait time/0:0:0:3(依次是日:时:分:秒)       run time/0:0:0:7        maxvmem/256.219M
  2. 1806799                 huang6894              wait time/0:0:0:4       run time/0:0:0:7        maxvmem/256.699M
  3. 1806699                 huang6894             wait time/0:0:0:3       run time/0:1:53:26      maxvmem/450.352M
  4. 1816637                 huang6895              wait time/0:0:0:3       run time/0:0:59:5       maxvmem/217.535M
  5. 1835283                 huang6895              wait time/0:0:12:16     run time/0:0:6:58       maxvmem/368.121M
  6. 1817872                 huang6896            wait time/0:0:0:4       run time/0:7:36:23      maxvmem/709.000M
  7. 1836650                 huang6896             wait time/0:0:0:21      run time/0:8:33:15      maxvmem/262.008M
  8. 1861096                 huang6897             wait time/0:0:0:5       run time/0:0:11:8       maxvmem/9.457G
复制代码
我想对对应第二列的第三第四第五列求和,应该怎么做啊?
想得到:
  1. 1806700                 huang6894             wait time/0:0:0:3       run time/0:0:0:7        maxvmem/256.219M
  2. 1806799                 huang6894              wait time/0:0:0:4       run time/0:0:0:7        maxvmem/256.699M
  3. 1806699                 huang6894             wait time/0:0:0:3       run time/0:1:53:26      maxvmem/450.352M
  4. 1816637                 huang6895              wait time/0:0:0:3       run time/0:0:59:5       maxvmem/217.535M
  5. 1835283                 huang6895              wait time/0:0:12:16     run time/0:0:6:58       maxvmem/368.121M
  6. 1817872                 huang6896           wait time/0:0:0:4       run time/0:7:36:23      maxvmem/709.000M
  7. 1836650                 huang6896             wait time/0:0:0:21      run time/0:8:33:15      maxvmem/262.008M
  8. 1861096                 huang6897             wait time/0:0:0:5       run time/0:0:11:8       maxvmem/9.457G

  9. ===>count all:
  10. huang6894             wait time:0:0:0:10       run time:0:1:53:40        maxvmem:963.270M
  11. huang6895             wait time:0:0:12:19       run time:0:1:6:3        maxvmem:585.656M
  12. huang6896             wait time:0:0:0:25       run time:0:16:9:38        maxvmem:971.008M
  13. huang6897             wait time:0:0:0:5       run time:0:0:11:8       maxvmem:9.457G
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
2 [报告]
发表于 2014-01-24 17:23 |只看该作者
本帖最后由 li0924 于 2014-01-24 17:27 编辑

给你部分代码,你自己在完整下。结果如下:
  1. linux-v2d9 px1/lottu> awk -f lottu.awk lottu19
  2. huang6894 0:0:0:10 0:1:53:40
  3. huang6895 0:0:12:19 0:1:6:3
  4. huang6896 0:0:0:25 0:16:9:38
  5. huang6897 0:0:0:5 0:0:11:8
复制代码
部分代码如下
  1. function ttos(t){split(t,a,":");s=a[1]*86400+a[2]*3600+a[3]*60+a[4];return s}
  2. function stot(s){d=int(s/86400);h=int(s%86400/3600);m=int((s-d*86400-h*3600)/60);se=int(s%60);f=sprintf("%d:%d:%d:%d",d,h,m,se);return f}

  3. BEGIN{FS="[ /]+"}{arr[$2]+=ttos($5);brr[$2]+=ttos($8);}END{for(i in arr){print i,stot(arr[i]),stot(brr[i])}}
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
3 [报告]
发表于 2014-01-24 17:24 |只看该作者
回复 2# li0924


    大神。。。你太逗了吧

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
4 [报告]
发表于 2014-01-24 17:31 |只看该作者
回复 3# huang6894
?; 是没给完整代码吗?
本来是可以给你的,我被自己坑了,函数stot里面开始返回为i;后来改为f。导致brr;返回不了结果。现在我下班了,你忙去吧

   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
5 [报告]
发表于 2014-01-24 17:33 |只看该作者
回复 4# li0924


    哈哈,谢谢你。。。我还以为你专门弄了个表情在代码中间逗我玩呢,哈哈

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2014-01-24 17:52 |只看该作者
本帖最后由 jason680 于 2014-01-24 17:52 编辑

回复 1# huang6894

here you are

$ awk -F'  +|/' 'BEGIN{K=1000;a[4]=a[3]=60;a[2]=24}function add(){for(n=4;n<=8;n+=2)if(n==8){if(sub("G$","",S[n]))S[n]*=1000;if(sub("G$","",$n))$n*=K;S[n]+=$n;S[n]=(S[n]>=K)?S[n]/K"G":S[n]"M"}else{split(S[n],s,":");S[n]="";split($n,t,":");for(c=4;c>0;c--){s[c]+=t[c];if(s[c]>a[c]&&a[c]!=""){s[c-1]+=int(s[c]/a[c]);s[c]%=a[c]};r=c==4?"":":";S[n]=sprintf("%02d%s",s[c],r""S[n])}}}function P(){printf("%-12s%-24s%-24s%-s\n",N,$3":"S[4],$5":"S[6],$7":"S[8]);delete S;delete s}N!=$2{if(N!="")P()}{add();N=$2;}END{P()}' FILE
huang6894   wait time:00:00:00:10   run time:00:01:53:40    maxvmem:963.27M
huang6895   wait time:00:00:12:19   run time:00:01:06:03    maxvmem:585.656M
huang6896   wait time:00:00:00:25   run time:00:16:09:38    maxvmem:971.008M
huang6897   wait time:00:00:00:05   run time:00:00:11:08    maxvmem:9.457G

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
7 [报告]
发表于 2014-01-24 18:02 |只看该作者
回复 6# jason680


    很感谢你,谢谢,谢谢

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
8 [报告]
发表于 2014-01-26 09:27 |只看该作者
本帖最后由 li0924 于 2014-01-26 16:23 编辑

回复 4# li0924
  1. function ttos(t){split(t,a,":");s=a[1]*86400+a[2]*3600+a[3]*60+a[4];return s}
  2. function stot(s){d=int(s/86400);h=int(s%86400/3600);m=int(s%3600/60);se=int(s%60);f=sprintf("%d:%d:%d:%d",d,h,m,se);return f}
  3. BEGIN{FS="[ /]+"}
  4.      {wait[$2]+=ttos($5);
  5.      run[$2]+=ttos($8);
  6.      mem[$2]+=/G/?$10*1024:$10}
  7.      END{for(i in wait){
  8.      print i,"wait time:"stot(wait[i]),"run time:"stot(run[i]),"maxvmem:"(int(mem[i]/1024)?mem[i]/1024 "G":mem[i]"M")}
  9.      }
复制代码
测试
  1. lottu> awk -f lottu.awk lottu19|column -t
  2. huang6894  wait  time:0:0:0:10   run  time:0:1:53:40  maxvmem:963.27M
  3. huang6895  wait  time:0:0:12:19  run  time:0:1:6:3    maxvmem:585.656M
  4. huang6896  wait  time:0:0:0:25   run  time:0:16:9:38  maxvmem:971.008M
  5. huang6897  wait  time:0:0:0:5    run  time:0:0:11:8   maxvmem:9.457G
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
9 [报告]
发表于 2014-01-26 16:00 |只看该作者
本帖最后由 yestreenstars 于 2014-01-26 16:27 编辑
  1. #!/bin/awk -f
  2. function A(a){split(a,f,"[/:]");return f[2]*86400+f[3]*3600+f[4]*60+f[5]}
  3. function B(b){return int(b/86400)":"int(b%86400/3600)":"int(b%3600/60)":"int(b%60)}
  4. function C(c){match(c,/([^/]+)(.)$/,g);if(g[2]=="G")g[1]*=1024;return g[1]}
  5. function D(d){if(d/1024>1)return d/1024"G";else return d"M"}
  6. {w[$2]+=A($4);r[$2]+=A($6);m[$2]+=C($7)}
  7. END{for(i in w)printf "%s\twait time:%s\trun time:%s\tmaxvmem:%s\n",i,B(w[i]),B(r[i]),D(m[i])}
复制代码
result:
  1. huang6894       wait time:0:0:0:10      run time:0:1:53:40      maxvmem:963.27M
  2. huang6895       wait time:0:0:12:19     run time:0:1:6:3        maxvmem:585.656M
  3. huang6896       wait time:0:0:0:25      run time:0:16:9:38      maxvmem:971.008M
  4. huang6897       wait time:0:0:0:5       run time:0:0:11:8       maxvmem:9.457G
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
10 [报告]
发表于 2014-01-26 16:22 |只看该作者
回复 9# yestreenstars
看了你的代码,我才理解
  1. int(b%86400%3600/60)":"int(b%86400%3600%60)
复制代码
可以简化为
  1. int(b%3600/60)":"int(b%60)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP