- 论坛徽章:
- 145
|
回复 1# bikkuri
$ ./SP_sort.pl
Usage : ./SP_sort.pl SP_FILE
Example: ./SP_sort.pl product.txt
- $ ./SP_sort.pl product.txt
- |EmpID.|Supported Products---------------------------|Open ARs|In Progress ARs|Pending ARs|
- |130310|7450 ESS;7750 SR;7950 XRS | 30| 9| 20|
- |409310|7450 ESS;7750 SR;7950 XRS;7210 SAS;7705 SAR | 41| 7| 24|
- |313597|7450 ESS;7750 SR;7950 XRS;7210 SAS;7705 SAR | 70| 2| 43|
- |612111|7450 ESS;7750 SR;7950 XRS;7210 SAS;7705 SAR | 35| 12| 14|
- |856225|7450 ESS;7750 SR;7950 XRS;7210 SAS;7705 SAR | 38| 8| 13|
- |838190|7450 ESS;7750 SR;7950 XRS | 23| 7| 5|
- |639763|7450 ESS;7750 SR;7210 SAS;7705 SAR;7710 SR | 29| 13| 8|
- |167936|7450 ESS;7750 SR;7950 XRS;7210 SAS;7701 CPAA | 25| 11| 10|
- |686580|7450 ESS;7750 SR;7950 XRS;7210 SAS;7710 SR | 42| 8| 19|
- |473732|7450 ESS;7750 SR;9471 WMM | 19| 4| 13|
- |306660|7450 ESS;7750 SR;7950 XRS;7210 SAS;7705 SAR | 42| 11| 19|
- |------+---------------------------------------------+--------+---------------+-----------+
复制代码
$ cat SP_sort.pl
#! /usr/bin/perl
# for supported Products sort
use strict;
use warnings;
sub message{
print <<EOF;
Usage : $0 SP_FILE
Example: $0 product.txt
EOF
exit 1;
}
message() if @ARGV != 1;
my $sSP_flag = 0;
my @aSP_data;
my %hSP_cnt;
sub prod_sort_cnt{
my($sData, $sSort_cnt) = @_;
my @aData = split /[|]/, $sData;
my $sLen = length($aData[2]);
$aData[2] =~ s/^\s+|\s+$//g;
my @aProd = split /;/, $aData[2];
if($sSort_cnt ne "sort"){
++$hSP_cnt{$_} foreach @aProd;
return;
}
my @aSort = map { $_->[0] }
sort { $b->[1] <=> $a->[1] or $a->[0] cmp $b->[0]}
map { [ $_, $hSP_cnt{$_} ] } @aProd;
$aData[2] = sprintf("%-${sLen}s", join(";",@aSort));
return join("|", @aData);
}
while(<>){
if($sSP_flag != 0){
if(m/--+--/){
my $sTmp = $_;
foreach(@aSP_data){
print prod_sort_cnt($_, "sort");
}
$sSP_flag = 0;
@aSP_data = ();
print $sTmp;
next;
}
push @aSP_data, $_;
prod_sort_cnt($_, "cnt");
next;
}
$sSP_flag = 1 if(m/Supported Products/);
print "$_";
}
|
|