This is based on the assumption that after ...30.6511 (V6.5.1 FP1) comes one or more spaces, then a word (that you are looking for), some more spaces, an IP address, possibly some spaces before the end of line. You need to modify the regex should this assumption not hold.
use strict;
use warnings;
use lib "/Library/Perl/5.10.0/";
use autodie;
open FILE, "<", "data/04102013_loginlogs.txt" or die "Cannot open inpu
+t file.\n";
open OUT, ">>", "output.txt" or die "Cannot open output file.\n";
my %found;
while( my $line=<FILE> ) {
$found{$1}++ if( $line =~ /unknown type\(0x134e\)\s+30\.6511\s
++\(V6\.5\.1 FP1\)\s+(.*)\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s*$/ );
}
print join( "|", keys %found), "\n";
close OUT;
close FILE;
I have used this test file:
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Singer 192.168.1.1
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Singer 192.168.1.1
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Runner 192.168.1.10
ddddd
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Singer 192.168.1.1
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Dancer 192.168.1.1
ddddd
ffffff
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Singer 192.168.1.1
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Singer 192.168.1.1
01 XXXXXXXX 10/Apr/13 01:13:10 unknown type(0x134e) 30.6511 (V6.5.1 FP
+1) Singer 192.168.1.1
|