Chinaunix

标题: 问个稍微麻烦的问题,请高手解答 [打印本页]

作者: macgradywk    时间: 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,怎么做?
作者: pitonas    时间: 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;
复制代码

作者: 灿烂小猪    时间: 2014-01-21 13:17
本帖最后由 灿烂小猪 于 2014-01-21 13:19 编辑

sed -i 's/\(\[[0-9][0-9]*\)\(.*\)$/\1:0\200000/' urfile
作者: 灿烂小猪    时间: 2014-01-21 13:20
错了,这是perl版,我写了个sed的程式。
作者: macgradywk    时间: 2014-01-21 13:34
这是个二维的哈希?回复 2# pitonas


   
作者: macgradywk    时间: 2014-01-21 13:38
[$_ > $max and $max = $_ for keys %{ $force{$k} };这句是什么意思,小弟新手求教b]回复 2# pitonas


   
作者: pitonas    时间: 2014-01-21 15:34
{:2_172:}
  1. for ( keys %{ $force{$k} } ) {
  2.     $max = $_ if $_ > $max;
  3. }
复制代码
回复 7# macgradywk


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2