On Thu, Feb 19, 2004 at 04:36:55PM -0800, david wrote: > Jeff Westman wrote: > > > I'm trying to help out another developer with a mini-Perl script. > > He has a file that contains one very long line, about 28M in size. > > He needs to do a replacement of all occurances of > > > > |^NEWLINE^|^ > > > > to a literal newline (HPUX, 0x0a or "\n"). > > > > When I ran this > > > > $ perl -ne 's/|^NEWLINE^|^/\n/g;print' loadFile > > > > it choked and gave me > > > > Out of memory during "large" request for 1073745920 bytes, total > > sbrk() is 604078796 bytes at -e line 1, <> line 1. > > > > if your system do not have memory to read in large chunk, you can easily > break the chunks up by reading smaller chunks to process. for example, the > follwoing reads 4k a time and process them: > > [panda]# perl -ne 'BEGIN{$/=\10} s/\|\^NEWLINE\^\|\^/\n/g; print' loadFile
The trouble with this approach is that you will miss any separators which are split. Your example actually reads 10 bytes at a time, but using $/ is the right idea: perl -ple 'BEGIN { $/="|^NEWLINE^|^" }' loadFile This reads "lines" separated by "|^NEWLINE^|^", chomps away the separator and prints the "lines" followed by a newline. perldoc perlrun perldoc perlvar -- Paul Johnson - [EMAIL PROTECTED] http://www.pjcj.net -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>