免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: volwang
打印 上一主题 下一主题

[文本处理] 按需填空,没有时输出“none”,特请帮忙。 [复制链接]

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
11 [报告]
发表于 2015-05-02 10:34 |只看该作者
回复 10# volwang
  1. awk -F'[ ;=]+' 'BEGIN{
  2.     t="job\tuser\tgroup\tjobname\tqueue\tctime\tstart\tend\tResource_List.ncpus\trun_time\tpend_time";
  3.     for(i=1;i++<=split(t,b,"\t");)a[b[i]]="";print t;
  4. }
  5. {
  6.     s=$4;for(i=5;i<=NF;i++)if($i in a)a[$i]=$(i+1);
  7.     st=a["start"];en=a["end"];ct=a["ctime"];
  8.     for(k=2;k<=length(b);k++)
  9.     {
  10.         
  11.         if((k==6||k==7||k==8)&&length(a[b[k]])!=0)
  12.         {
  13.             a[b[k]]=strftime("%Y/%m/%d/%T",a[b[k]]);
  14.         }
  15.         a[b[k]]=k==10?sprintf("%03d",int((en-st)/3600)):a[b[k]];
  16.         a[b[k]]=k==11?sprintf("%03d",int((ct-st)/3600)):a[b[k]];
  17.         s=length(a[b[k]])?s"\t"a[b[k]]:s"\tnone";
  18.     }
  19.     for(k=2;k<=length(b);k++)a[b[k]]="";
  20.     print s;s=st=en=ct="";
  21. }' file | column -t
复制代码
试试看

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2015-05-02 21:52 |只看该作者
回复 11# songyc_2015

我测试了一例子:输出为:
10005.mgmt1        pdadmin Domain        CASrag        public        2015/04/24/13:58:58        2015/04/26/04:59:21        2015/04/30/07:57:42        20        98        -39

其中98 和-39输出有误。
需要保留小数点后面三位,98.xxx,或者-39.xxx。
pend_time=start-ctime,不会出现负值,前面我写错了。
请帮忙帮到底。另不知道您怎么联系。



   

论坛徽章:
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
13 [报告]
发表于 2015-05-02 23:41 |只看该作者
回复 10# volwang

$ bash ./get_data.sh
job         user      group   jobname  queue  ctime_time           start_time           end_time             Resource_List.software  Resource_List.ncpus  platform        xxxx  run_time(h)  pend_time(h)
1008.mgmt1  spbadmin  Domain  test456  workq  2013/12/25/14:15:52  2013/12/25/14:15:55  2013/12/25/14:16:01  Fluent                  20                   XeonE5-20c-80G  none  0.002        0.001
1009.mgmt1  admin     Domain  test567  workq  2013/12/25/14:15:52  2013/12/25/14:15:55  2013/12/25/14:16:01  Fluent                  20                   XeonE5-20c-80G  none  0.002        0.001
1010.mgmt1  admin     Domain  test789  workq  2013/12/25/14:15:52  2013/12/25/14:15:55  2013/12/25/14:16:01  CFX                     40                   XeonE5-20c-80G  none  0.002        0.001


$ cat get_data.sh
msg="job user group jobname queue ctime start end Resource_List.software Resource_List.ncpus platform xxxx run pend"

awk -vmsg="$msg" -F'[; ]+' '
  BEGIN{
    nst=split("ctime start end", st, " ");
    for(n=1;n<=nst;n++)add[st[n]]="_time";

    nat=split("run pend",at," ")
    for(n=1;n<=nat;n++)add[at[n]]="_time(h)";

    t=split(msg,am," ");
    for(n=1;n<=t;n++){
      s=s p am[n]add[am[n]]; p=" ";
    }
    print s;
  }
  NF>1{
    delete a;
    a["job"]=$4;
    for(n=5;n<=NF;n++){
      #printf "$"n"="substr($n,1,9)" "
      if(split($n,x,"=")>1)a[x[1]]=x[2];
      #printf "("x[1]")"
    }
    a["run"]  = sprintf("%.3f", (a["end"]   - a["start"])/3600);
    a["pend"] = sprintf("%.3f", (a["start"] - a["ctime"])/3600);
   
    for(n=1;n<=nst;n++){
      k=st[n]
      a[k] = strftime("%Y/%m/%d/%T",a[k]);
    }
    s=p="";
    for(n=1;n<=t;n++){
      v=a[am[n]];
      s=s p (v?v:"none");
      p=" ";
    }
    print s;
  }
' FILE | column -t


   

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
14 [报告]
发表于 2015-05-03 14:35 |只看该作者
  1. awk --re-interval -F\; -vkey_array="user|group|jobname|queue|ctime|start|end|Resource_List.ncpus|xxx" 'function time(x) {cmd="date +%Y/%m/%d/%H:%M:%S -d \042 1970/01/01 0800 "x" seconds\042";cmd|getline y;return y}BEGIN{printf ("%13-s","job");split(key_array,a,"|");for(i=0;i++<length(a);)printf ("%20-s",a[i]);print ""}$0!=""{printf ("%13-s",$3);for(i=0;i++<length(a);){match($0,a[i]"=([^ ]+)",b);printf ("%-20s",b[1]==""?"null":a[i]~/start|end|ctime/?time(b[1]):b[1])}print ""}' inputfile
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2015-05-05 17:31 来自手机 |只看该作者
问题已经解决,谢谢各位的无私帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP