免费注册 查看新帖 |

Chinaunix

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

[文本处理] 新年第二问:文本处理求助-逻辑有点儿复杂! [复制链接]

论坛徽章:
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
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-31 13:50 |只看该作者 |倒序浏览
本帖最后由 bikkuri 于 2014-01-31 08:25 编辑

大家新年好!
还有一个问题请教各位高手!
我的busybox从远端Linux服务器上接受到状态更新数据后,需要根据本地的状态进行一些判断后,修改状态更新文件,然后再返还给Linux服务器。

远端传来的更新文件:update.txt
  1. 201401311130 beijing unknown2 A 156
  2. 201401311132 shanghai box2 K 17
  3. 201401311133 beijing unknown3 C 49
  4. 201401311134 beijing unknown1 F 23
  5. 201401311135 shanghai box1 M 35
  6. 201401311136 shanghai box3 N 28
复制代码
本地的变量设定:
$base, $hostname, $line, $number分别指向4个本地文件,其内容如下:
  1. root@unknown2:/tmp# echo "$(date +%Y%m%d%H%M) $(cat $base) $(cat $hostname) $(cat $line) $(cat $number)"
  2. 201401311136 beijing unknown2 A 158
复制代码
更新规则:
1.首先取当前时间$(date +%Y%m%d%H%M),将原来的update.txt中的超过10分钟的记录全部删除;
2.在剩下的记录中,查找有没有hostname和本地hostname相同的记录,如果有的话则删除;
3.在剩下的记录中,查找有没有base和本地base相同的记录,
        如果没有base和本地base相同的记录的话,
                添加echo "$(date +%Y%m%d%H%M) $(cat $base) $(cat $hostname) $(cat $line) $(cat $number)"的输出到更新文件的最后;
        如果有base和当前base相同的记录的话,检查其$line是不是和本地$line相同,
                如果有相同的话,比较其$number与本地$number的大小,
                        如果其$number大于本地$number,
                                则本地$line的字母变为后面一个字母,比如A变成B,但是如果B也被占用的话,则顺延到C,然后本地$number变为0;
                                添加echo "$(date +%Y%m%d%H%M) $(cat $base) $(cat $hostname) $(cat $line) $(cat $number)"的输出到更新文件的最后;
                        如果其$number小于或等于本地$number,
                                添加echo "$(date +%Y%m%d%H%M) $(cat $base) $(cat $hostname) $(cat $line) $(cat $number)"的输出到更新文件的最后;
                如果其$line都和本地$line不同的话,
                                添加echo "$(date +%Y%m%d%H%M) $(cat $base) $(cat $hostname) $(cat $line) $(cat $number)"的输出到更新文件的最后;

例如以上的更新文件update.txt在处理完后应该变为:

  1. 201401311132 shanghai box2 K 17
  2. 201401311133 beijing unknown3 C 49
  3. 201401311134 beijing unknown1 F 23
  4. 201401311135 shanghai box1 M 35
  5. 201401311136 shanghai box3 N 28
  6. 201401311136 beijing unknown2 A 158
复制代码
谢谢大家!

论坛徽章:
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
2 [报告]
发表于 2014-01-31 14:58 |只看该作者
本帖最后由 bikkuri 于 2014-01-31 08:13 编辑

第一条和第二条更新规则可以用以下这条命令做到:
  1. cat update.txt|awk -v d=$(date +%Y%m%d%H%M) -v h=$(cat $hostname) '{if(d-$1<10&&$3!=h)print $0}'
复制代码
关键要求助的是根据第三条更新规则在文件最后追加一条记录怎么写?
关键的关键是顺延的情况怎么写?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP