免费注册 查看新帖 |

Chinaunix

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

[文本处理] 无线基站在线时长更新问题 [复制链接]

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
11 [报告]
发表于 2014-06-30 12:59 |只看该作者
回复 10# bikkuri
这个地方是有bug的,因为我当时还没读完max的所有行,
不知到这个enb已存在,这样做貌似有问题,好像还是要
放到END处理。

   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
12 [报告]
发表于 2014-06-30 13:53 |只看该作者
本帖最后由 bikkuri 于 2014-06-30 13:54 编辑

我觉得没有问题吧,只要在后面把已经存在的max_enb比较小的那条记录删除(也就是不打印出来)就可以了吧?

Herowinter 发表于 2014-06-30 12:59
回复 10# bikkuri
这个地方是有bug的,因为我当时还没读完max的所有行,
不知到这个enb已存在,这样做貌 ...

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
13 [报告]
发表于 2014-06-30 14:44 |只看该作者
@牛逼,不懂帮顶

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
14 [报告]
发表于 2014-06-30 15:04 |只看该作者
本帖最后由 Herowinter 于 2014-06-30 15:26 编辑

回复 12# bikkuri
按照你的需求,改了下代码,看看还有没有问题。
  1. #!/bin/bash

  2. awk '

  3.     NR==FNR{
  4.         upd_enb=$6
  5.         upd_record=$0
  6.         upd_val=gensub(/\[([0-9]+).*/,"\\1",1,$NF)
  7.         next
  8.     }

  9.     !found && gensub(/\[([0-9]+).*/,"\\1",1,$NF)<upd_val{
  10.         print upd_record
  11.         found=1
  12.     }
  13.    
  14.     $6!=upd_enb

  15.     ' $1 enb.max > enb.max.tmp

  16. mv enb.max.tmp enb.max
复制代码
  1. cat ue3424.upd
  2. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]

  3. [masonzhu@rat122 zzz]$ cat ue8342.upd
  4. 2014-06-29 05:11:06 1403989866 sgw02 ue8342 enb5303 [0/2] [53/535]

  5. [masonzhu@rat122 zzz]$ cat enb.max
  6. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  7. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1008 [0/3] [45/3129]
  8. 2014-06-29 04:21:03 1403986863 sgw02 ue5453 enb5303 [2/6] [3/852]

  9. [masonzhu@rat122 zzz]$ ./test1.sh ue3424.upd
  10. [masonzhu@rat122 zzz]$ cat enb.max
  11. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  12. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1008 [0/3] [45/3129]
  13. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
  14. 2014-06-29 04:21:03 1403986863 sgw02 ue5453 enb5303 [2/6] [3/852]

  15. [masonzhu@rat122 zzz]$ ./test1.sh ue8342.upd
  16. [masonzhu@rat122 zzz]$ cat enb.max
  17. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  18. 2014-06-29 05:11:06 1403989866 sgw02 ue8342 enb5303 [0/2] [53/535]
  19. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1008 [0/3] [45/3129]
  20. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
15 [报告]
发表于 2014-06-30 16:06 |只看该作者
本帖最后由 bikkuri 于 2014-06-30 18:54 编辑

不好意思,好像还是有问题。
假如enb.max为空的情况下或者不含有和当前enb相同的enb的记录时候,好像用这个代码update不进新记录。
  1. [root@hp7:test]$ cat test3.sh
  2. #!/bin/bash

  3. awk '

  4.     NR==FNR{
  5.         upd_enb=$6
  6.         upd_record=$0
  7.         upd_val=gensub(/\[([0-9]+).*/,"\\1",1,$NF)
  8.         next
  9.     }

  10.     !found && gensub(/\[([0-9]+).*/,"\\1",1,$NF)<upd_val{
  11.         print upd_record
  12.         found=1
  13.     }

  14.     $6!=upd_enb

  15.     ' $1 enb.max > enb.max.tmp

  16. mv enb.max.tmp enb.max
  17. [root@hp7:test]$ cat enb.max
  18. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  19. [root@hp7:test]$ cat ue8342.upd
  20. 2014-06-29 05:11:06 1403989866 sgw02 ue8342 enb5303 [0/2] [53/535]
  21. [root@hp7:test]$ ./test3.sh ue8342.upd
  22. [root@hp7:test]$ cat enb.max
  23. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  24. [root@hp7:test]$ >enb.max
  25. [root@hp7:test]$ cat enb.max
  26. [root@hp7:test]$ ./test3.sh ue8342.upd
  27. [root@hp7:test]$ cat enb.max
  28. [root@hp7:test]$
复制代码
Herowinter 发表于 2014-06-30 15:04
回复 12# bikkuri
按照你的需求,改了下代码,看看还有没有问题。

论坛徽章:
0
16 [报告]
发表于 2014-06-30 17:55 |只看该作者
天虎浏览器提醒您:因当前网页内容过多,占用内存过大,本标签页将于10秒后自动帮您关闭。

论坛徽章:
5
白羊座
日期:2014-10-28 11:23:27水瓶座
日期:2015-01-20 10:19:022015亚冠之柏斯波利斯
日期:2015-07-11 18:17:2015-16赛季CBA联赛之同曦
日期:2015-12-23 12:38:582016猴年福章徽章
日期:2016-02-18 15:30:34
17 [报告]
发表于 2014-06-30 18:11 |只看该作者
这是来广告天虎浏览器的吗? 回复 16# 用户名注册后不能更改


   

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
18 [报告]
发表于 2014-06-30 20:16 |只看该作者
本帖最后由 Herowinter 于 2014-07-01 09:22 编辑

回复 15# bikkuri
忘了考虑和测试边界情况了,有可能存在遍历完enb.max前面都没发现
一个合理的插入位置,这时在enb.max文件最后插入一行就可以了,你
列举的两种情况好像都是这个原因。目测代码改成这样就可以了,家里
没环境,没办法测试了。
  1. #!/bin/bash

  2. awk '

  3.     NR==FNR{
  4.         upd_enb=$6
  5.         upd_record=$0
  6.         upd_val=gensub(/\[([0-9]+).*/,"\\1",1,$NF)
  7.         next
  8.     }

  9.     !found && gensub(/\[([0-9]+).*/,"\\1",1,$NF)<upd_val{
  10.         print upd_record
  11.         found=1
  12.     }

  13.     $6!=upd_enb

  14.     END{
  15.         if(!found)
  16.             print upd_record
  17.     }

  18.     ' $1 enb.max > enb.max.tmp

  19. mv enb.max.tmp enb.max
复制代码
  1. 现在这里可能还有点问题,这个布尔表达式的值不一定是数值比较?
  2. gensub(/\[([0-9]+).*/,"\\1",1,$NF)<upd_val,不知道是不是要改成
  3. +gensub(/\[([0-9]+).*/,"\\1",1,$NF)<+upd_val或作其他处理。
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
19 [报告]
发表于 2014-06-30 22:35 |只看该作者
谢谢您的答复。
我试了一下,确实需要改成+gensub(/\[([0-9]+).*/,"\\1",1,$NF)<+upd_val,否则排序结果是错误的。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
20 [报告]
发表于 2014-07-02 08:21 |只看该作者
本帖最后由 bikkuri 于 2014-07-02 08:35 编辑

谢谢您的指点,但是现在又有一个新问题:
您的程序中处理的enb.max和ue8342.upd是在同一个地方,但是实际使用的情况是enb.max在Linux服务器上,而ue8342.upd和更新程序在UE移动设备上,所以需要通过一个ssh来远程执行更新命令。
我在UE移动设备上,手工执行下面这条更新命令,是可以得到期望的正确结果的。
  1. awk "NR==FNR{upd_enb=\$6;upd_record=\$0;upd_val=gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF);next}!found && +gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)<+upd_val{print upd_record;found=1}\$6!=upd_enb;END{if(!found)print upd_record}" ue8342.upd enb.max > enb.max.tmp
复制代码
执行下面这个更新程序也可以得到期望的正确结果。
  1. #!/bin/sh
  2. ssh user@host.com 'awk "NR==FNR{upd_enb=\$6;upd_record=\$0;upd_val=gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF);next}!found && +gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)<+upd_val{print upd_record;found=1}\$6!=upd_enb;END{if(!found)print upd_record}" ue8342.upd enb.max > enb.max.tmp'
复制代码
但是我执行以下更新程序,则执行时$ue,$em都为空,导致更新失败。
  1. #!/bin/sh
  2. number=8342
  3. ue=ue$number.upd
  4. em=enb.max
  5. ssh user@host.com 'awk "NR==FNR{upd_enb=\$6;upd_record=\$0;upd_val=gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF);next}!found && +gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)<+upd_val{print upd_record;found=1}\$6!=upd_enb;END{if(!found)print upd_record}" $ue $em > $em.tmp'
复制代码
请问更新程序应该怎么写才能做到远程更新Linux服务器上的enb.max文件呢?
谢谢。






Herowinter 发表于 2014-06-30 20:16
回复 15# bikkuri
忘了考虑和测试边界情况了,有可能存在遍历完enb.max前面都没发现
一个合理的插入位置 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP