免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教:以某列值为关键字,将相同值排序的行按规则合并为一行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-24 16:02 |只看该作者 |倒序浏览
文件test内容:
1  testa 07112012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
2  testb 07112012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
3  testa 07122012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
4  testb 07122012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。     
5  testa 07112012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
6  testb 07112012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
7  testa 07122012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
8  testb 07122012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。

第三列含义为: mmddyyyy

要做的操作:
以第二列主机名为关键字, 将相同主机名、不同日期和不同错误代码的行合并为一行

预期的结果是:
testa  7月11日,7月12日 报ERROR CODE A,ERROR CODE B  #因测试所致, 对应用没有影响,可以忽略。
testb  7月11日,7月12日 报ERROR CODE A,ERROR CODE B  #因测试所致, 对应用没有影响,可以忽略。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-09-25 08:25 |只看该作者
本帖最后由 rdcwayx 于 2012-09-25 10:26 编辑

你预期的结果似乎缺少逻辑,就算按照你的要求给出这个报告,看报告的人也会看糊涂的。

论坛徽章:
0
3 [报告]
发表于 2012-09-25 10:21 |只看该作者
回复 2# rdcwayx


我的预期的逻辑是:
将相同主机名 在不同日期报的不同错误代码的多行合并为一行,后面的注释行取任意错误代码的注释都行。
合并后的格式: 主机1  日期1,日期2,..  报错误代码1,错误代码2 .. #注释

不知解释清楚了没有, 谢谢版主的回复。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
4 [报告]
发表于 2012-09-25 10:27 |只看该作者
本帖最后由 rdcwayx 于 2012-09-25 12:28 编辑

1. 报错误代码1 是否要和日期1 一一对应上?还是只要列出该服务器的错误代码列表即可,这样的话,为何不是这样的格式:

主机1  日期1,报错误代码1, 日期2, 错误代码2, 日期3,报错误代码3,

还是 (比如日期3 的错误代码和日期1的相同)

主机1  日期1, 日期2, 日期3,报错误代码1,错误代码2

2. 一天内有多种错误代码如何表述。
3. 后面的注释既然无用,何必输出。
4. 还有,该源文件的记录都是错误代码 (error code) ?是否还会有其他格式的记录出现?

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
5 [报告]
发表于 2012-09-26 23:31 |只看该作者

组合

本帖最后由 mcshell 于 2012-09-26 23:39 编辑

回复 1# aixabc
这样?  我多添加了一行做了下测试
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. my %hash;
  5. my $date;
  6. my %tmp;
  7. map{
  8. my $group=$_->[2]." ".$_->[3]." ".$_->[4];
  9. push @{$hash{$_->[0]}},conver_date($_->[1]),$group;
  10. }map{[(split/\s+/,$_,7)[1,2,3,4,5]]}<DATA>;
  11. map{
  12. $date=$_;
  13. #push @{$hash{$date}},@{$hash{$_}}[0]++;
  14. print "$_\t";
  15. foreach (@{$hash{$date}}){
  16. $tmp{$_}++;

  17. }
  18. print "$_," for sort keys %tmp;
  19. print "#因测试所致, 对应用没有影响,可以忽略\n";
  20. }( keys %hash);
  21. sub   conver_date{
  22.         my $date = shift;
  23.         my $month;
  24.         my $day;
  25.         if ($date =~ /(\d)(\d)(\d)(\d)\d{4}$/){
  26.         my      $month_1 = $1;
  27.          my        $day_1 = $3;
  28.          $month=$month_1 ? "$1$2": $2 ;
  29.          $day=$day_1 ? "$3$4" : $4;
  30.         }
  31.         return $month."月".$day."日";
  32. }

  33. __DATA__
  34. 1  testa 07112012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
  35. 2  testb 07112012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
  36. 3  testa 07122012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
  37. 4  testb 07122012 ERROR CODE A  #因测试所致, 对应用没有影响,可以忽略。
  38. 5  testa 07112012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
  39. 6  testb 07112012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
  40. 7  testa 07122012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
  41. 8  testb 07122012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
  42. 9  testc 08122012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
  43. 9  testc 12122012 ERROR CODE B  #因更改测试参数所致, 对应用没有影响,可以忽略。
复制代码
  1. [root@elastix perl]# perl cu_hb9.pl
  2. testb   7月11日,7月12日,ERROR CODE A,ERROR CODE B,#因测试所致, 对应用没有影响,可以忽略
  3. testa   7月11日,7月12日,ERROR CODE A,ERROR CODE B,#因测试所致, 对应用没有影响,可以忽略
  4. testc   12月12日,7月11日,7月12日,8月12日,ERROR CODE A,ERROR CODE B,#因测试所致, 对应用没有影响,可以忽略
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP