#!/usr/local/bin/perl -w use strict; chomp(my @lines = ); my @newlines = reverse grep m/'\d+'/, @lines; @lines = map { if (/'(\d+)'/) { my $c = scalar @newlines - $1 + 1; my $l = $1 == 1 ? "NewLine1\n" : ""; "$l(+$c) " . $newlines[$1-1] . ";fac=$c" } else { /Line5/ ? "$_\nMeanLine" : $_ } } @lines; print "$_\n" for @lines; __DATA__ Line1 Line2 Line3 Line4 Line '1' Line '2' Line '3' Line '4' Line5 Line6 #### Line1 Line2 Line3 Line4 NewLine1 (+4) Line '4';fac=4 (+3) Line '3';fac=3 (+2) Line '2';fac=2 (+1) Line '1';fac=1 Line5 MeanLine Line6