免费注册 查看新帖 |

Chinaunix

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

[文本处理] Shell 脚本编写 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-02 12:42 |只看该作者 |倒序浏览
请求大侠帮忙了!!!!编写一个shell脚本,脚本可以输入起止时间,如sh a.sh 09:00:00 18:00:00;文件内容如下:共三列,想按每秒输出一行其中BU后边的值为最大的行;
BU4-GID0 420104 00:08:30
BU3-GID0 420104 00:08:30
BU4-GID0 498048 00:08:30
BU0-GID0 420104 00:08:31
BU7-GID0 420104 00:08:31
BU8-GID0 420104 00:08:31
BU9-GID0 420104 00:08:31
BU10-GID0 420104 00:08:31
BU4-GID0 598048 00:08:31
BU3-GID0 420104 00:08:32
BU2-GID0 420104 00:08:32
BU0-GID0 420104 00:08:32
BU1-GID0 420104 00:08:32
BU5-GID0 420104 00:08:32
BU6-GID0 820104 00:08:32
BU7-GID0 420104 00:08:32
BU8-GID0 620104 00:08:32
BU9-GID0 520104 00:08:32
BU10-GID0 420104 00:08:32
BU11-GID0 420104 00:08:32
BU12-GID0 420104 00:08:32
BU4-GID0 420104 00:08:32
BU4-GID0 420104 00:08:32
BU3-GID0 420104 00:08:32
BU2-GID0 420104 00:08:32
BU0-GID0 420104 00:08:32
比如输出结果:
4 498048 00:08:30
10 420104 00:08:31
12 420104 00:08:32
把其中第一列中的BU -GID0去掉,其中第一列值区间在0-99.

谢谢!

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2016-06-02 13:02 |只看该作者
回复 1# Jason_0316

  1. sed 's/BU\([0-9][0-9]\?\)-GID0/\1/'
复制代码

论坛徽章:
0
3 [报告]
发表于 2016-06-02 13:09 |只看该作者
回复 2# cjaizss

大师,这个脚本怎么写?
   

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
4 [报告]
发表于 2016-06-02 13:11 |只看该作者
  1. #!/bin/bash

  2. start_time=`date -d "$1" +%s`
  3. end_time=`date -d "$2" +%s`

  4. while read line; do
  5.         set -- $line
  6.         current_time=`date -d "$3" +%s`
  7.         if [[ $current_time -ge $start_time && $current_time -le $end_time ]]; then
  8.                 temp=`echo $1 | sed -r 's/[^0-9]*([0-9]+)-.*/\1/'`
  9.                
  10.                 if [[ $temp -ge ${a[$current_time]} ]]; then
  11.                         a[$current_time]=$temp
  12.                         b[$current_time]="$temp $2 $3"
  13.                 fi
  14.         fi
  15.        
  16. done < myfile

  17. for i in ${!b[*]}; do
  18.         echo ${b[i]}
  19. done
复制代码
回复 1# Jason_0316


最大的BU,可能有相等的,按你的答案,相等去最后一个?

   

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
5 [报告]
发表于 2016-06-02 13:13 |只看该作者
  1. awk '{f=+substr($1,3);if(a[$3]<=f){a[$3]=f;b[$3]=$2}}END{for(i in a)print a[i],b[i],i}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2016-06-02 13:18 |只看该作者
回复 4# liion631818

对的,假如都是5 ,就取最后一个!



   

论坛徽章:
0
7 [报告]
发表于 2016-06-02 13:21 |只看该作者
回复 5# haooooaaa


    BU后边这个值,区间在0-99之间。这个脚本最大输出是9

谢谢!

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
8 [报告]
发表于 2016-06-02 13:23 |只看该作者
本帖最后由 haooooaaa 于 2016-06-02 13:44 编辑

回复 7# Jason_0316


你还要输入时间的话, 这样
  1. awk -vs="000829" -ve="000832" -F'[ :]+' '{m=+($3$4$5)}m>+s && m<+e{f=+substr($1,3);g=$3":"$4":"$5;if(a[g]<=f){a[g]=f;b[g]=$2}}END{for(i in a)print a[i],b[i],i}' b
  2. 4 498048 00:08:30
  3. 10 420104 00:08:31
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2016-06-02 13:31 |只看该作者
回复 3# Jason_0316
哦,看错了需求


   

论坛徽章:
0
10 [报告]
发表于 2016-06-02 13:45 |只看该作者
回复 4# liion631818


    在aix下运行有些问题,
    date -d "$2" +%s;没-d的参数
    sed -r 's/[^0-9]*([0-9]+)-.*/\1/'; -r的参数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP