Need Help in Inserting a new line in a file using PERL


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need Help in Inserting a new line in a file using PERL
# 1  
Old 01-19-2009
Need Help in Inserting a new line in a file using PERL

I need a perl script to find and replace a specific pattern in a file to a new line.

BAsically I have a single line data in a file with 10 mb to 200 MB. I want to put a new line based on a specific pattern to open the file in Excel / Access.

Following is the sample data in a file

*PAABCD *BA1Z8345 SAMPLE *FA00 *PA1Z TEST *FA00 DATA FROM THE LAB *BA1Z1000 research from the customer is endless

I want the out put to look like this

*BA1Z8345 SAMPLE *FA00 *PA1Z TEST *FA00 DATA FROM THE LAB
*BA1Z1000 research from the customer is endless


I tried the following perl script. It did not work properly. i need some help.
Code:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my $startdir = '/home/mydir/';
my $find = '/*BA1Z';
my $replace = '\n*BA1Z';
my $doctype = 'txt';
print qq~Finding "$find" and replacing it with "$replace"\n~;
find(
 sub{
   return unless (/\.$doctype$/i);
   local @ARGV = $_;
   local $^I = '.bac';
   while( <> ){
      if( s/$find/$replace/ig ) { 
      print;
   }
  else {
      print;
  }
 }
}, $startdir);
print "Finished";


Last edited by otheus; 01-30-2009 at 07:46 AM.. Reason: code tags added, formatting changed
# 2  
Old 01-30-2009
Uh, find() and File::Find is for searching the filesystems for files. You really don't need this (normally). You can instead do this from the command line:
Code:
find . -type f -name "*.bac" -print | xargs perl -p -i -e 'SCRIPT'

Here 'SCRIPT' is the tidbit of code you have there (with some meaningful bug fixes):
Code:
s/ (\*BA1Z.*)/\n$1/;

Now, before you go doing this, okay, perl's -i option will replace any file provided on the command line with whatever it does. So test it out first on a COPY of your files first. Because we're using find, make a new directory first, and run find within that directory:
Code:
cd project_dir
mkdir /tmp/project
cp *.bac /tmp/project/
cd /tmp/project
find ..... | perl ...


Last edited by otheus; 01-30-2009 at 07:53 AM.. Reason: added -type f to find, added note
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Inserting a line to a file

Hi, consider a file called mobile.txt as follows: For type lovers, add a new line at the end of it by copying its previous line and add a +1 to the field1, field2 Additionally, there are only 3 plans available to lovers type, so it should not work for lovers type already having 3 lines under... (11 Replies)
Discussion started by: Gautham
11 Replies

2. Shell Programming and Scripting

Inserting a new line into an already existing file

hello .. I am new to perl scripting, I have a text file, and would like to insert 3 new lines into the same file at different line numbers using perl scripting. Any Help regarding this will be very useful. say the file is sample.txt, contents are aaaaa bbbb ccccc dddd eeeee ffffffff... (4 Replies)
Discussion started by: hemalathak10
4 Replies

3. Shell Programming and Scripting

Inserting a line in a file after every alternate line

Friends , I have a large file and i need to insert a line after every line.I am actually unaware how to do it.Any help appreciated. My File control station *ATM* , qread $OSS.Jul13A.FI01 interval 1 intcount 1 control station *ATM* , qread $OSS.Jul13A.FI02 interval 1 intcount... (4 Replies)
Discussion started by: appu2176
4 Replies

4. Shell Programming and Scripting

Inserting IP in one line of a file

Hi, I have this line: ip=111.222.133.144,mac=00:16:3E:2A:08:3C,vifname=veth360','ip=10.2.3.4,vifname=veth360a' ^ | ------- I want to insert this IP 144.133.222.111 between "144"... (4 Replies)
Discussion started by: iga3725
4 Replies

5. Shell Programming and Scripting

Problem inserting text into file after specific line

this is utterly embarassing :( after posting here i revisited my files and found that when i used "vi" instead of a gui based editor, i suddenly found that the indentations were in fact wrong :( sorry about this :( (0 Replies)
Discussion started by: mocca
0 Replies

6. Shell Programming and Scripting

inserting line to a file

I have posted it previously but somehow could not delete the previous post.I felt i could not explain the problem statement well. Here t goes.I have a file say File1. Now i need a specific pattern from the lines to be added to the other line. File: red blue green ABC.txt@ABC END black... (1 Reply)
Discussion started by: ngupta
1 Replies

7. Shell Programming and Scripting

inserting a new line in a file

I'm sure you guys have answered this elsewhere but I can't seem to find where so here goes. #!/bin/bash n=120 a=$(sed '120q;d' energy.xvg) while ;do a=$(sed $n'q;d' energy.xvg) echo "$a \n" > newfile n=$(($n+100)) done exit 0 that script should read the file energy.xvg, start at... (1 Reply)
Discussion started by: gelitini
1 Replies

8. Shell Programming and Scripting

comparing and inserting common line in other file

Hi, I have two files-- file1- file2:- i have to compare two files and where the uid is same i have to take the password and insert it above the telephone number. the output should be like this-- uid : 1418 common so insert the password thbs above the line telephonenumber. (2 Replies)
Discussion started by: namishtiwari
2 Replies

9. Shell Programming and Scripting

Inserting New Line in File using Sed ??

Dear All, I have a file called football where i have a list of 11 players each on different lines. I wish to add a name of another player on the first line. I have created a file called footballscript in vi writing the following sed command to achieve this ... cat football | sed -e '1 i\... (4 Replies)
Discussion started by: Mary_xxx
4 Replies

10. Shell Programming and Scripting

perl/mail - inserting file text in message body

I've got the following code sub mail_report { $Mailer = '/usr/sbin/sendmail joe@somewhere.net'; open MAIL,"|$Mailer"; print MAIL "Subject: $X connection attempt \n"; open MESSAGE, "<$outdir$X"; print MESSAGE '$outdir$X\n'; close MESSAGE; close MAIL; } #End... (2 Replies)
Discussion started by: thumper
2 Replies
Login or Register to Ask a Question