in reply to Parsing log files (still)
Splitting on /:\s*/ will save you some work. Actually, let's split on /:\s+/ to avoid needlessly splitting up the date.
We have two ways of looking at item 3 (formerly item 5): 1) It's either a space seperated list, and brackets need to be removed from the second (split approach), or 2) it's a string from which two substrings should be extractded (regexp approach). Since I'd use a regexp to remove the brackets, I might as well use a regexp for the whole thing.
I also added two sanity checks, in case the line doesn't appear as we think.
while (<DATA>) { chomp; my @parts = split /:\s+/, $_; next if $#parts < 3; my @parts_of_3 = $parts[3] =~ /^(\d+) <(.*)>$/; next unless @parts_of_3; my @result = ($parts[1], @parts_of_3); print(join(', ', @result), "\n"); } __DATA__ Jul 6 14:36:41 moe postfix/smtp[15107]: A73DC113B63: to=<oetiker@conc +entric.com>, relay=adamant.concentric.com[207.155.248.168], delay=17, + status=bounced (host adamant.concentric.com[207.155.248.168] said: 5 +54 <oetiker@concentric.com>: Recipient address rejected: Unknown or i +nvalid user oetiker@concentric.com (in reply to RCPT TO command))
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Parsing log files (still)
by Kanji (Parson) on Jul 06, 2005 at 23:11 UTC |