#Takes a csv file in which fields may contain null (empty) values. For each null #value, substitutes the last non-null value in that field. E.g. # # ABC,FGD,123,TEST # ,,124,TEST # ,,125,TEST2 # FGD,HJY,123,DATA # HJY,YUI,458,DATA2 # ,,852,DATA # #converts to # # ABC,FGD,123,TEST # ABC,FGD,124,TEST # ABC,FGD,125,TEST2 # FGD,HJY,123,DATA # HJY,YUI,458,DATA2 # HJY,YUI,852,DATA # # use strict; use Text::ParseWords; my (@line, @previous); my $j; while (<>) { @line = parse_line ",", 1, $_ ; for ( $j = 0; $j < @line; $j++ ) { $line[$j] = $previous[$j] unless $line[$j]; } print join( ",", @line); @previous = @line; }