如何通过关键词匹配统计其出现的频率
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让人领略到perl正则表达式的强大,程序如下:
#!/usr/bin/perl use strict; my (%hash,%hash1,@array); while(<>){ s/\r\n//; my $line; if(/-(.+?)【(.+?)】【(.+?)】(定单积压)/){ $line=$1.'.*'.$2.'.*'.$4; push @array,$_ unless exists $hash{$line}; $hash{$line}+=1;} elsif(/-(.+?)【(.+?)】(.+?)【(.+?)】/){ $line=$1.'.*'.$2.'.*'.$4; push @array,$_ unless exists $hash{$line}; $hash{$line}+=1; }} while(my($key,$value)=each %hash){ $key =~ s/(\()(.+)(\))/\\$1$2\\$3/; foreach my $index(@array){ if($index =~ /$key/){ $hash1{$index}=$value; #last; } }} foreach my $key(sort {$hash1{$b}<=>$hash1{$a}} keys %hash1){ print "$key,$hash1{$key}\n"; }