#!/usr/bin/perl -w use strict; use warnings; use autodie; use diagnostics; open my $read_log, '<', '/home/jay/test_output/tmp_app.log' or die $!; my $pattern = 'mystring'; my @log_lines=<$read_log>; my @all_lines_occurrences; my @all_extracts; my @unique_values; for(@log_lines){ if ($_ =~ m/.*$pattern.*/) { push (@all_lines_occurrences, $_); #print $_ "\n"; } } for (@all_lines_occurrences) { /^\d+\-\d+\-\d+ \d+:\d+:\d+\,\d+ \[(.*)\] .* \[(.*)\.(.*)\] .*\\n/; push (@all_extracts, $2); #print "target type: $2 \n"; } for(@all_extracts){ print $_ "\n"; } my @unique_values = do { my %seen; grep { !$seen{$_}++ } @all_extracts }; print "\n Unique values are:\n"; for (@unique_values) { print $_ "\n"; } close $read_log;