#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @result; my $file = '/path/to/file'; open my $fh,"<",$file or die $!; local $/ = "\n...\n"; while(my $entry = <$fh>){ my $bool = 0; my @lines = split /\n/,$entry; my @aacc = grep{/^(?:AA|CC)/}@lines; my @temp = grep{/^(?:BB|DD|EE)/}@lines; if(grep{/Mercedes/}@aacc){ push @result,\@temp; } } close $fh; print Dumper(\@result); my @headers = qw(BB DD EE); my $format = "%-15s %-15s %-15s\n"; print sprintf($format,@headers); for my $sresult(@result){ my @texte; for my $head(@headers){ my ($line) = grep{$_ =~ /^$head/}@$sresult; $line = " " unless $line; my $text = (split /\s+/,$line,2)[1]; $text ||= " "; push @texte,$text; } print sprintf($format,@texte); }