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))