#!perl use strict; my @prev = (); my @data = (); while (){ chomp; my @row = split ';',$_; for my $i (0..$#row){ if ( length ($row[$i]) == 0 ){ $row[$i] = $prev[$i]; } } push @data,\@row; @prev = @row; } for (@data){ print join "\t",@$_,"\n"; } __DATA__ 1668;1733;60;32;3173;0;2517;58221;55764;0;0;0;0;Td;30720;1;9;25;0;2; Carry 0; 1671;1661;0;0;;;0;0;0;0;;;;;;1;9;25;0;2; Carry 1;