亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: perl文件匯總處理? [打印本頁]

作者: linux68    時(shí)間: 2011-07-21 18:31
標(biāo)題: perl文件匯總處理?
我又一個(gè)這樣的文件:
2011-07-14      508659  47565   1454    268418  7414    120506  42236   18341   1724    1001
2011-07-15      512299  49171   1451    272390  9257    115802  41476   19736   1913    1103
2011-07-16      593584  64497   1938    315873  12554   121701  51259   22347   2258    1157
2011-07-17      579760  61131   1871    324644  12819   112279  43750   20446   2298    522
2011-07-18      488095  46196   1351    268757  9447    101951  39843   18563   1758    229
2011-07-19      506264  47166   1369    274203  9608    117195  36280   18357   1849    237
2011-07-20      542874  44995   2919    1457    273729  9865    128045  36265   43493   2050    56
每列之間用\t分隔,我想把除日期之外的數(shù)據(jù)分列求和,最好把日期寫到第一列:結(jié)果如下:
07.17--07.20    3731535 360721  12353   1725742 334828  699299  382889  154055  55293   6299    56  
謝謝!
作者: kurri    時(shí)間: 2011-07-22 03:06
  1. #!/usr/bin/perl -w
  2. open FH,"</home/kurri/Templates/abc";
  3. my @info;
  4. while (<FH>) {
  5.     chomp;
  6.     my @tmp = (split /\s+/);
  7.     push @{$info[0]},$tmp[0];
  8.     my $i = 1;
  9.     while ($i < @tmp) {
  10.         $info[$i] += $tmp[$i];
  11.         $i++;
  12.     }
  13. }
  14. close FH;
  15. $info[0]->[0] =~ s/^\d+-(\d+)-(\d+)$/$1.$2/;
  16. $info[0]->[-1] =~ s/^\d+-(\d+)-(\d+)$/$1.$2/;
  17. $info[0] = $info[0]->[0]."--".$info[0]->[-1];
  18. print join "\t",@info,"\n";
復(fù)制代碼
初學(xué)寫的很丑。。。
作者: albertd    時(shí)間: 2011-07-22 04:49
本帖最后由 albertd 于 2011-07-22 04:52 編輯
  1. my (@a,@b,@c);
  2. while (<>) {
  3.     chomp;
  4.     @a = split /\s+/;
  5.     push (@b, (substr shift @a, 5));
  6.     foreach (0..$#a) {
  7.         $c[$_] += $a[$_];
  8.     }
  9. }
  10. print "$b[0]--$b[-1] @c\n";
復(fù)制代碼

作者: seufy88    時(shí)間: 2011-07-22 09:54
本帖最后由 seufy88 于 2011-07-22 10:06 編輯

初學(xué)的。試一下
open my $FD,'<','/tmp/file';

my $count=0;
my @array;
while(<$FD>){
        chomp;
        my @fields=split/\s+/,$_;
        $array[$count]=\@fields;
        $count+=1;

}
my @result;

for my $j (1..11){
my $temp;
for my $i (0..$#array){
        $temp=$temp+$array[$i][$j];
}
        push @result,$temp;
}
print "@result\n";
作者: xxhacker    時(shí)間: 2011-07-22 11:40
本帖最后由 xxhacker 于 2011-07-22 11:42 編輯

  1. #! /usr/bin/perl

  2. my (@a,@b);
  3. while(<DATA>) {
  4.         @a = split;       
  5.         for (my $i=1;$i<=$#a;$i++) {
  6.                 $b[$i] += $a[$i];               
  7.         }       
  8. }

  9. print "@b";
  10. __DATA__
  11. 2011-07-14      508659  47565   1454    268418  7414    120506  42236   18341   1724    1001
  12. 2011-07-15      512299  49171   1451    272390  9257    115802  41476   19736   1913    1103
  13. 2011-07-16      593584  64497   1938    315873  12554   121701  51259   22347   2258    1157
  14. 2011-07-17      579760  61131   1871    324644  12819   112279  43750   20446   2298    522
  15. 2011-07-18      488095  46196   1351    268757  9447    101951  39843   18563   1758    229
  16. 2011-07-19      506264  47166   1369    274203  9608    117195  36280   18357   1849    237
  17. 2011-07-20      542874  44995   2919    1457    273729  9865    128045  36265   43493   2050    56
復(fù)制代碼
看了樓主的需求,我自己也寫了一個(gè),哈哈,竟然和三樓的思路竟是一樣的~~
作者: lkk2003rty    時(shí)間: 2011-07-22 11:44
  1. perl -F'\t' -ane '$a=0;foreach (@F[1..$#F]){$a+=$_;}print "$F[0] $a @F[1..$#F]";' file
復(fù)制代碼
一句話就夠了~~




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2