免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
31 [报告]
发表于 2014-07-03 09:09 |只看该作者
但是tmp文件的内容是空的啊?
我手工执行的时候产生的tmp文件是有内容的,但是放在crontab里执行产生的tmp文件的内容就为空了。

Herowinter 发表于 2014-07-03 09:06
回复 29# bikkuri
awk的输出是空呀,不是先写到tmp文件,再mv吗?
单引号里引用shell变量要3引号,然后这 ...

论坛徽章:
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
32 [报告]
发表于 2014-07-03 09:11 |只看该作者
本帖最后由 Herowinter 于 2014-07-03 09:12 编辑

回复 31# bikkuri

27楼的代码我没用crontab是会更新远程的文件的,
你试一下,问题到底在那些代码还是crontab的设置?

论坛徽章:
0
33 [报告]
发表于 2014-07-03 11:03 |只看该作者
回复 31# bikkuri

现在见到crontab问题我已经不看问题描述了,直接回复四个字:
绝对路径
可以解决98%问题。

论坛徽章:
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
34 [报告]
发表于 2014-07-03 15:00 |只看该作者
本帖最后由 bikkuri 于 2014-07-03 15:15 编辑

用这段代码已经实现了更新enb.max的功能。
  1. #!/bin/sh
  2. number=8342
  3. ue=ue$number.upd
  4. em=enb.max

  5. upd_record=`head -1 $ue`

  6. ssh user@host.com 'awk -vupd_record="'"$upd_record"'" "BEGIN{\$0=upd_record;upd_enb=\$6;upd_val=gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)}!found&&+gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)<+upd_val{print upd_record;found=1}\$6!=upd_enb;END{if(!found)print upd_record}" '"$em"' > '"$em.tmp"';mv '"$em.tmp"' '"$em"''
复制代码
crontab里确实是因为路径的错误没有得到输出,改正后就可以了。
但是还是有一个问题,就是+gensub(/\\[([0-9]+).*/,\"\\\\1\",1,\$NF)<+upd_val这一段可能还是有问题,
当UE中的max_enb值比enb.max中的max_enb值更小的情况下,这个脚本依然用UE的状态信息替换掉了enb.max中max_enb更大的记录。

Herowinter 发表于 2014-07-02 17:28
回复 26# bikkuri
因为你的每个UE的.upd文件其实都只有一行,可以把这一行更新
的内容当作参数传给awk, ...

论坛徽章:
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
35 [报告]
发表于 2014-07-03 15:04 |只看该作者
回复 34# bikkuri
这里是我需求读得不够细,当enb已存在,我得出是更新原记录时,
没有判断值是不是比原来大,直接更新了,我再改一下。

   

论坛徽章:
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
36 [报告]
发表于 2014-07-03 15:32 |只看该作者
回复 34# bikkuri
希望这次可以了,bug太多,代码质量堪忧。
  1. #!/bin/sh
  2. number=8342
  3. ue=ue$number.upd
  4. em=enb.max

  5. upd_record=`head -1 $ue`

  6. ssh user@host.com 'awk -vupd_record="'"$upd_record"'" "BEGIN{\$0=upd_record;upd_enb=\$6;upd_val=gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)}!found&&+gensub(/\[([0-9]+).*/,\"\\\\1\",1,\$NF)<+upd_val{print upd_record;found=1}\$6==upd_enb{if(!found)found=1;else next}1;END{if(!found)print upd_record}" '"$em"' > '"$em.tmp"';mv '"$em.tmp"' '"$em"''
复制代码

论坛徽章:
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
37 [报告]
发表于 2014-07-03 15:47 |只看该作者
这次彻底可以了!
谢谢您这段完美而忧桑的代码!


Herowinter 发表于 2014-07-03 15:32
回复 34# bikkuri
希望这次可以了,bug太多,代码质量堪忧。

论坛徽章:
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
38 [报告]
发表于 2015-01-01 17:18 |只看该作者
本帖最后由 bikkuri 于 2015-01-01 18:53 编辑

Herowinter大神,上次谢谢您的帮助!
在上次的基础上,能不能再帮我加一个小功能。
请允许我再重复一下背景:
有一些移动设备UE,在连接到无线基站ENB之后,每隔5分钟会向核心网Linux服务器发送以下格式的状态数据:
假设编号为3424的UE的状态文件名为ue3424.upd,内容如下:
  1. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
复制代码
这次要做的事是,记录每个ENB的最后活跃时间,也就是根据各个UE的状态数据,来产生一个enb.last文件。
例如上述UE3424,检查enb.last文件,如果该文件中没有enb1001的内容,则把自身的状态信息添加到enb.last中,并按第三个字段的时间戳按从大到小进行排序;
如果该文件中已经有enb1001的内容,则需要把原来的enb.last中enb1001那条记录删除并把自身的状态信息添加到enb.last文件中并按时间戳排序。

举例如下:
假如enb.last内容如下:
  1. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  2. 2014-06-29 04:21:03 1403986863 sgw02 ue5453 enb5303 [2/6] [3/852]
复制代码
这时UE3424发现该文件中没有enb1001的记录,则直接把自己的状态数据加入到该文件中并按时间戳值从大到小的顺序(1403988067>1403987768>1403986863)排序。
  1. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
复制代码
这样enb.max的内容应该变成
  1. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
  2. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
  3. 2014-06-29 04:21:03 1403986863 sgw02 ue5453 enb5303 [2/6] [3/852]
复制代码
假如之后有一个UE8342的状态如下:
  1. 2014-06-29 05:11:06 1403989866 sgw02 ue8342 enb5303 [0/2] [53/535]
复制代码
则UE8342会将自身的状态数据替换enb.last中enb5303那条记录并按时间戳值从大到小的顺序(1403989866>1403988067>1403987768)排序。
  1. 2014-06-29 05:11:06 1403989866 sgw02 ue8342 enb5303 [0/2] [53/535]
  2. 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
  3. 2014-06-29 04:36:08 1403987768 sgw02 ue9564 enb3902 [0/5] [74/4382]
复制代码
删除后面的旧记录,加入新纪录并排序。

谢谢!

Herowinter 发表于 2014-07-03 15:32
回复 34# bikkuri
希望这次可以了,bug太多,代码质量堪忧。

论坛徽章:
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
39 [报告]
发表于 2015-01-01 18:35 |只看该作者
回复 38# bikkuri


现在休长假啊,而且这个代码我半年以前写的。。。
我5号上班有空会帮你看的。

论坛徽章:
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
40 [报告]
发表于 2015-01-01 18:45 |只看该作者
本帖最后由 bikkuri 于 2015-01-02 01:04 编辑

谢谢!不着急啊!新年快乐!

我根据您上次写的那个脚本,修改了一下,好象可以正常工作。
  1. #!/bin/sh
  2. #
  3. # 2014-06-29 04:41:07 1403988067 sgw01 ue3424 enb1001 [0/3] [45/3129]
  4. # $1         $2       $3         $4    $5     $6      $7    $8
  5. #
  6. number=8342
  7. ue=ue$number.upd
  8. el=enb.last

  9. upd_record=`head -1 $ue`

  10. ssh user@host.com 'awk -vupd_record="'"$upd_record"'" "BEGIN{\$0=upd_record;upd_enb=\$6;upd_val=\$3}!found&&+\$3<+upd_val{print upd_record;found=1}\$6==upd_enb{if(!found)found=1;else next}1;END{if(!found)print upd_record}" '"$el"' > '"$el.tmp"';mv '"$el.tmp"' '"$el"''
复制代码
但是我不确定有没有bug,等您有时间的时候再帮我看一下啊。
谢谢!


Herowinter 发表于 2015-01-01 18:35
回复 38# bikkuri
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP