3 # E-mail filter tool for Aptech
5 # Copyright 2011, David Veliev (gotoindvdum@gmail.com).
6 # This program may be used under Apache License 2.0.
10 # Глобальные переменные
12 my $isRemoveDuplicates = 0;
13 my $isSplitByDomens = 0;
21 # Парсер параметров командной строки
22 sub parseCommandLine {
23 my $arg = shift(@ARGV);
27 if($arg =~ /^-{1,2}.+$/){
28 if ($arg =~ /^-{1,2}version$/){
31 } elsif ($arg =~ /^-{1,2}help$/){
34 } elsif ($arg eq '--remove-duplicates'){
35 $isRemoveDuplicates = 1;
36 } elsif ($arg eq '--split-by-domens'){
38 } elsif ($arg =~ /--exclude-domen[=]{0,1}([\.\w]*)/){
40 illegalUse() if $excludeDomen ne '' && $arg !~ /--exclude-domen=[\.\w]*/;
41 $excludeDomen = shift(@ARGV) if $excludeDomen eq '';
42 illegalUse() if $excludeDomen eq '';
43 } elsif ($arg =~ /--output-file[=]{0,1}([\.\w]*)/){
45 illegalUse() if $outputFile ne '' && $arg !~ /--output-file=[\.\w]*/;
46 $outputFile = shift(@ARGV) if $outputFile eq '';
47 illegalUse() if $outputFile eq '';
52 illegalUse() if $fileName ne '';
63 # Вывод информации о программе
66 E-mail filter tool for Aptech
69 Copyright 2011, David Veliev (gotoindvdum@gmail.com).
71 This program may be used under Apache License 2.0.
77 # Вывод доступных параметров командной строки
79 my $help = q {usage: }.$0. q { [KEYS] FILENAME [KEYS]
81 Parse for e-mails file FILENAME with arguments KEYS and print result to standart output stream.
84 --help print this help
85 --version print version and information about this script
86 --remove-duplicates remove e-mail duplicates
87 --split-by-domens split e-mails by domens
88 --exclude-domen[=]DOMEN exclude e-mails with domen DOMEN
89 --output-file[=]OUTFILENAME redirect standart output to this file
94 # Неправильный формат параметров командной строки
96 print "Illegal use!\n\n";
103 open FILE, $fileName or die "Failed to open $fileName: $!\n";
106 push @emails, $1 while s/([\.\w]+@[\.\w]+)//;
109 if($isRemoveDuplicates){
111 @emails = grep {! $tmp{$_}++} @emails;
115 $1 ne $excludeDomen if $_ =~ /[\.\w]+@([\.\w]+)/;
118 if($isSplitByDomens){
120 my $a_domen = $1 if $a =~ /[\.\w]+@([\.\w]+)/;
121 my $b_domen = $1 if $b =~ /[\.\w]+@([\.\w]+)/;
122 $a_domen cmp $b_domen;
126 while($#emails >= 0){
127 my $email = shift @emails;
128 my $domen = $1 if $email =~ /[\.\w]+@([\.\w]+)/;
129 push @tmp, '' if !$tmp{$domen}++;
135 open STDOUT, ">$outputFile" or die "Failed to open $outputFile: $!\n";
137 print "$_\n" for (@emails);