Tom Smith wrote: > John W. Krahn wrote: >> >> You could use some of Perl's idioms to do what you want: >> >> #!C:\Perl\bin\perl.exe >> use strict; >> use warnings; >> >> @ARGV = glob 'maillog*' or die "No maillog files found.\n"; >> >> while ( <> ) { >> print if /(?:imapd|pop3d).*?Log.*?user/; >> } > > Ok, here's the script that worked... > > ---------- > #!C:\Perl\bin\perl.exe > > use strict; > use warnings; > use Carp; > > @ARGV = glob 'maillog*' or croak "Can't find any maillogs. $!"; > open(FILE,'>parsedmail.txt') or croak "Can't open parsedmail.txt. $!"; > while ( <> ) { > print FILE if /.*imapd.*Log.*user.*$/ || /.*pop3d.*Log.*user.*$/; > } > close FILE; > > @ARGV = glob 'messages*' or croak "Can't find any maillogs. $!"; > open(FILE,'>parsedmessages.txt') or croak "Can't open > parsedmessages.txt. $!"; > while ( <> ) { > print FILE if /.*imapd.*Log.*user.*$/ || /.*pop3d.*Log.*user.*$/; > } > close FILE; > ---------- > > This outputs the expected data to the two files in question. I'm rackin' > my brain a bit over something else, now. (If you haven't noticed yet, > I'm quite new to Perl.) > > I need to sort this output by day, then by time. Here's a sample of the > first few columns of the maillog and messages files: > > ---------- maillog > Dec 5 13:51:55 server ipop3d... > Dec 5 13:51:55 server ipop3d... > > ---------- messages > Dec 27 13:23:43 server ipop3d > Dec 27 11:27:17 server imapd > > Basic Linux log files. > > Can anyone point me in the right direction for doing this? I'd like to > understand the why as well as the how so pointers to docs would be nice, > I'm just not getting the sort() docs at perldoc.perl.org.
If you are guaranteed to have the same month name on every line then just using sort will work: @ARGV = glob 'maillog*' or croak "Can't find any maillogs."; open FILE, '>', 'parsedmail.txt' or croak "Can't open parsedmail.txt. $!"; print FILE sort grep /(?:imapd|pop3d).*Log.*user/, <>; close FILE; If however there will be different month names then something like this should work: my %mon2num = qw/Jan 01 Feb 02 Mar 03 Apr 04 May 05 Jun 06 Jul 07 Aug 08 Sep 09 Oct 10 Nov 11 Dec 12/; my %num2mon = reverse %mon2num; @ARGV = glob 'maillog*' or croak "Can't find any maillogs."; open FILE, '>', 'parsedmail.txt' or croak "Can't open parsedmail.txt. $!"; print FILE map { s/^(\S+)/$num2mon{$1}/; $_ } sort map { s/^(\S+)/$mon2num{$1}/; $_ } grep /(?:imapd|pop3d).*Log.*user/, <>; close FILE; John -- Perl isn't a toolbox, but a small machine shop where you can special-order certain sorts of tools at low cost and in short order. -- Larry Wall -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/