use strict; use warnings; use English q{-no_match_vars}; my @range = (6030 .. 6090); #my @range = (4000 .. 6200); my $rxExtract; { local $LIST_SEPARATOR = q{|}; $rxExtract = qr{bn(@range),}; } my %frequencies = (); while () { next unless m{$rxExtract}; $frequencies{$1} ++; } my $outFile = q{freq.out}; open my $outFH, q{>}, $outFile or die qq{open: $outFile: $!\n}; print $outFH qq{$_ - }, exists $frequencies{$_} ? qq{$frequencies{$_}\n} : qq{0\n} for @range; close $outFH or die qq{close: $outFile: $!\n}; __END__ base1,Thu 21Dec06 08:00:02 ,62bn6085, bytes 608584 base1,Thu 21Dec06 08:00:07 ,63bn5600, bytes 77383 base2,Thu 21Dec06 08:00:18 ,65bn6085, bytes 88373 base5,Thu 21Dec06 08:00:19 ,66bn6042, bytes 388377 base4,Thu 21Dec06 08:03:44 ,81bn4370, bytes 8956003 base6,Thu 21Dec06 08:03:57 ,82bn4512, bytes 7783 base3,Thu 21Dec06 08:01:03 ,06bn5600, bytes 77383 #### 6030 - 0 6031 - 0 6032 - 0 6033 - 0 6034 - 0 6035 - 0 6036 - 0 6037 - 0 6038 - 0 6039 - 0 6040 - 0 6041 - 0 6042 - 1 6043 - 0 6044 - 0 6045 - 0 6046 - 0 6047 - 0 6048 - 0 6049 - 0 6050 - 0 6051 - 0 6052 - 0 6053 - 0 6054 - 0 6055 - 0 6056 - 0 6057 - 0 6058 - 0 6059 - 0 6060 - 0 6061 - 0 6062 - 0 6063 - 0 6064 - 0 6065 - 0 6066 - 0 6067 - 0 6068 - 0 6069 - 0 6070 - 0 6071 - 0 6072 - 0 6073 - 0 6074 - 0 6075 - 0 6076 - 0 6077 - 0 6078 - 0 6079 - 0 6080 - 0 6081 - 0 6082 - 0 6083 - 0 6084 - 0 6085 - 2 6086 - 0 6087 - 0 6088 - 0 6089 - 0 6090 - 0