govindkailas has asked for the wisdom of the Perl Monks concerning the following question:
I have file which is of ~1gb, my requirement is to replace the specific lines specified range of characters with the provided string. I am using perl 5.8, below is my code. Due to the interpolation oneliners are not getting the variables vaule.
die "usage: perl $0 file_nm line_nb col_start col_end replacement \n" +unless @ARGV; die "Invalid number of arguments \nusage: perl $0 file_nm line_nb col_ +start col_end replacement \n" if @ARGV ne 5; my ($file_nm,$line_nb,$col_start,$col_end,$string)=@ARGV; chomp($content=`perl -ne "print if $. == ${line_nb}" $file_nm`); #get +the specific line from file chomp ($replacement=`perl -ne "substr($content, $col_start, $col_end, +$string);print $content"`); #get the replaced line #print "New content \n$content \n"; `perl -pi -e "s/$content/$replacement/" $file_nm`; #now substitute the + whole line with the new replaced line
Arguments to the script are File name line number ,in which the replacement should take place replacement start position replacement end position string to replace with Suggestions are welcome
--- Update --- Wrote a perl script finallyuse File::Basename; die "usage: perl $0 file_nm line_nb pos_start-pos_end replacement \n" +unless @ARGV; die "Invalid number of arguments \nusage: perl $0 file_nm line_nb pos_ +start pos_end replacement \n" if @ARGV ne 5; my ($file_nm,$line_nb,$pos,$string)=@ARGV; my ($pos_start,$pos_end)=split (/-/,$pos); $file_nm=File::Basename::basename($file_nm); open(READ_HN,"$file_nm") or die "Cant open $file_nm $! \n"; open(WRITE_HN,">${file_nm}.updated") or die "Cant write to ${file_nm}. +updated $! \n"; #chomp($content=`perl -ne "print if $. == ${line_nb}" $file_nm`); while(<READ_HN>) { if ($. == $line_nb) { substr($_, $pos_start, $pos_end, $string); } print WRITE_HN "$_\n"; } close(WRITE_HN); close(READ_HN);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Replace specific lines specific range of characters.
by roboticus (Chancellor) on Apr 04, 2013 at 12:10 UTC | |
|
Re: Replace specific lines specific range of characters.
by hdb (Monsignor) on Apr 04, 2013 at 13:05 UTC | |
|
Re: Replace specific lines specific range of characters.
by TJPride (Pilgrim) on Apr 04, 2013 at 12:12 UTC |