#! /usr/bin/perl use locale; use strict; if (@ARGV < 3) { print "USAGE: cut_prefs.pl CUT_OFF TOTAL_PER ABS_CUT\n\n"; print "Obcina wpisy mało ważne, opis nie jest uwzględniany\n"; print "jeżeli zachodzi jeden z warunków:\n"; print " - jezeli liczba wystapien danego opisu jest mniejsza\n"; print " od \$CUT_OFF*(liczba wystapien poprzedniego opisu)\n"; print " - jezeli liczba wystapien danego opisu jest mniejsza\n"; print " od \$TOTAL_PER*(suma wszystkich wystapien)\n"; print " - jezeli liczba wystapien danego opisu jest mniejsza\n"; print " od \$ABS_CUT\n"; exit; } # jezeli liczba wystapien danego opisu jest mniejsza # od $CUT_OFF*(liczba wystapien poprzedniego opisu) - opis nie jest uwzgledniany my $CUT_OFF = shift; # jezeli liczba wystapien danego opisu jest mniejsza # od $TOTAL_PER*(suma wszystkich wystapien) - opis nie jest uwzgledniany my $TOTAL_PER = shift; # jezeli liczba wystapien danego opisu jest mniejsza # od $ABS_CUT - opis nie jest uwzgledniany my $ABS_CUT = shift; my $pref = ""; my $oldPref = " "; my $countTotal = -1; my $count = -1; while (<>) { if (($count == -1) && ($_ =~ /^$oldPref\t.*/)) { next; } if ($pref =~ //) { $_ =~ /^(\w+)\t.+\t(\d+)\t(\d+)/; $pref = $1; $count = $2; $countTotal = $3; # print "\$pref=$pref\t\$count=$count\t\$countTotal=$countTotal\n"; } $_ =~ /\w+\t.+\t(\d+)\t\d+/; my $c = $1; # print "\$c=$c\t\$CUT_OFF*\$count=$CUT_OFF*$count\t\$TOTAL_PER*\$countTotal=".$TOTAL_PER*$countTotal."\n"; if (($CUT_OFF*$count < $c) && ($TOTAL_PER*$countTotal < $c) && ($ABS_CUT < $c)) { $count = $c; print $_; } else { $count = -1; $oldPref = $pref; $pref = ""; } }