The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Google UNIX.COM


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Find/replace to new file: ksh -> perl McLan Shell Programming and Scripting 1 05-16-2008 12:14 AM
read space filled file and replace text at specific position COD Shell Programming and Scripting 6 04-21-2008 02:40 AM
replace the last delimiter jisha Shell Programming and Scripting 4 01-28-2008 03:26 AM
replace delimiter : with '\001' in unix data file spandu Shell Programming and Scripting 4 04-25-2006 05:51 AM
field delimiter with a space or more uphamtn UNIX for Dummies Questions & Answers 3 05-15-2003 01:22 PM

Reply
 
Submit Tools LinkBack Thread Tools Search this Thread Display Modes
  #1  
Old 02-14-2008
Registered User
 

Join Date: Feb 2008
Posts: 56
replace space with delimiter in whole file -perl

Hi

I have a file which have say about 100,000 records..
the records in it look like

Some kind of text 1234567891 abcd February 14, 2008 03:58:54 AM lmnop

This is how it looks.. if u notice there is a 2byte space between each column.. and im planning to replace that with '|' ..

say ..

Some kind of text|1234567891|abcd|February 14, 2008 03:58:54 AM|lmnop

.. here is the code which i have written.. but someone should help me in completing it... thanks in advance

open(fh_tmp,"<","$chk_file");
while (my $line = <fh_tmp>)
{
$line =~ s/ /|/g ;
open(out,">>",tmpfile);
print out $line;
close(out);
}
close(fh_tmp);


please correct me if im wrong.. thanks
Reply With Quote
Forum Sponsor
  #2  
Old 02-14-2008
Registered User
 

Join Date: Feb 2008
Posts: 56
small correction.. there can be more than 2 byte space between 2 columns...
it should replace with delimiter '|' if it has two consecutive spaces .. not just one..

as the first column has single spaces in it "Some kind of text" .. this is one single record...
-thanks
Reply With Quote
  #3  
Old 02-14-2008
...@...
 

Join Date: Feb 2004
Location: NM
Posts: 4,298
why do you open tmpfile inside the loop? Move the open statement above the loop, close below the loop.
Reply With Quote
  #4  
Old 02-14-2008
Registered User
 

Join Date: Jan 2007
Posts: 366
sed -e "s/ [ ]*/|/g" infile > outfile


there are 2 spaces between the first "/" and the "[".
Reply With Quote
  #5  
Old 02-14-2008
Registered User
 

Join Date: Feb 2008
Posts: 56
i will correct the loop position..thanks for that jim...
hey sb008.. im writing a perl script.. not a shell.. but still thanks for ur suggestion.. i can use it when i do a shell ..

thanks for ur replies
Reply With Quote
  #6  
Old 02-14-2008
Registered User
 

Join Date: Jan 2008
Posts: 327
Code:
open(FH_TMP,"<","$chk_file");
open(OUT,">>",tmpfile);
while (my $line = <FH_TMP>)
{
$line =~ s/ {2,}/|/g;
print OUT $line;
}
close(FH_TMP);
close(OUT);
could be done faster using perls inplace editor:

Code:
@ARGV = ($chk_file);
$^I = '.bak';
while (<>){
s/ {2,}/|/g;
print;
}
will cretae a backup of the original file first. (.bak extension)
Reply With Quote
  #7  
Old 02-14-2008
Registered User
 

Join Date: Jan 2007
Posts: 366
Quote:
Originally Posted by meghana View Post
i will correct the loop position..thanks for that jim...
hey sb008.. im writing a perl script.. not a shell.. but still thanks for ur suggestion.. i can use it when i do a shell ..

thanks for ur replies
aaaaaaaaaaaaaah, homework
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes




All times are GMT -7. The time now is 06:50 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0