免费注册 查看新帖 |

Chinaunix

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

问个稍微麻烦的问题,请高手解答 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-21 11:32 |只看该作者 |倒序浏览
假如我有这样一个文件:
force name1[4] = 0;
force name2[2] = 0;
force name1[3] = 0;
force name4[1] = 0;
force name5[2] = 0;
force name2[5] = 0;
force name6[4] = 0;
force name2[4] = 0;
force name1[5] = 0;
force name3[4] = 1;
force name3[2] = 0;
.
.
.
我想要把它变成
force name1[5:0] = 000000;
force . . .

就是把之前的文件同名的合并起来一起force,怎么做?

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2014-01-21 12:16 |只看该作者
{:2_172:}小伙伴们, 这个低调奢华有内涵。
  1. #!/usr/bin/perl
  2. my %force;
  3. my $fn = 'force name';
  4. while (<DATA>) {
  5.     my ( $name, $index, $value ) = /name(\d+)\[(\d+)\]\s+=\s+(\d+)/;
  6.     $force{$name}{$index} = $value;
  7. }
  8. for my $k ( sort { $a <=> $b } keys %force ) {
  9.     my $max = 0;
  10.     $_ > $max and $max = $_ for keys %{ $force{$k} };
  11.     print "${fn}${k}[$max:0] = ";
  12.     print map { $force{$k}{$_} // 0 } 0 .. $max;
  13.     print ";\n";
  14. }

  15. __DATA__
  16. force name1[4] = 0;
  17. force name2[2] = 0;
  18. force name1[3] = 0;
  19. force name4[1] = 0;
  20. force name5[2] = 0;
  21. force name2[5] = 0;
  22. force name6[4] = 0;
  23. force name2[4] = 0;
  24. force name1[5] = 0;
  25. force name3[4] = 1;
  26. force name3[2] = 0;
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-01-21 13:17 |只看该作者
本帖最后由 灿烂小猪 于 2014-01-21 13:19 编辑

sed -i 's/\(\[[0-9][0-9]*\)\(.*\)$/\1:0\200000/' urfile

论坛徽章:
0
4 [报告]
发表于 2014-01-21 13:20 |只看该作者
错了,这是perl版,我写了个sed的程式。

论坛徽章:
0
5 [报告]
发表于 2014-01-21 13:34 |只看该作者
这是个二维的哈希?回复 2# pitonas


   

论坛徽章:
0
6
发表于 2014-01-21 13:36
我需要的就是perl回复 4# 灿烂小猪


   

论坛徽章:
0
7 [报告]
发表于 2014-01-21 13:38 |只看该作者
[$_ > $max and $max = $_ for keys %{ $force{$k} };这句是什么意思,小弟新手求教b]回复 2# pitonas


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
8 [报告]
发表于 2014-01-21 15:34 |只看该作者
{:2_172:}
  1. for ( keys %{ $force{$k} } ) {
  2.     $max = $_ if $_ > $max;
  3. }
复制代码
回复 7# macgradywk


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP