Operations on a file with Deletion , Modification and Insertion of lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Operations on a file with Deletion , Modification and Insertion of lines
# 1  
Old 12-18-2009
Operations on a file with Deletion , Modification and Insertion of lines

Hi All ,

Given a file , I need to delete , modify and insert lines matching certain patterns in that file using shell scripting.

e.g. If a file FILE1 has following content :

Code:
CUST.ABC.DEF = CUST.ABC.DEF * CUST.ABC.DEF
PRINTF(CUST.ABC.DEF)
CUST.ABC.DEF =  mid(CUST.ABC.DEF,10.34)
PRINTF("HOWDY")
CUST.GHI.JKL = (CUST.ABC.DEF * MID(CUST.GHI.JKL,12,34)) + mid(CUST.ABC.DEF,10,34)
IF(CUST.ABC.DEF != CUST.GHI.JKL) THEN
PRINTF("CAME HERE")
CUST.GHI.JKL = CUST.GHI.JKL + 1
ENDIF

Then , I need to do following three modifications in the file FILE1:

1) I need to delete all lines with PRINTF statements.
2) I need to modify all instances of small "mid" word with capital "MID".
3) I need to insert a line containing "{" after line with IF statement.

I need to all above operations without reading file line by line to avoid performance issues because file may contain more than 10000 lines. And for the same reason, I want to avoid usage of temporary file.

Can anyone please suggest solution for stated problem ?
# 2  
Old 12-18-2009
Quote:
Originally Posted by swapnil.nawale
Hi All ,

Given a file , I need to delete , modify and insert lines matching certain patterns in that file using shell scripting.

e.g. If a file FILE1 has following content :

Code:
CUST.ABC.DEF = CUST.ABC.DEF * CUST.ABC.DEF
PRINTF(CUST.ABC.DEF)
CUST.ABC.DEF =  mid(CUST.ABC.DEF,10.34)
PRINTF("HOWDY")
CUST.GHI.JKL = (CUST.ABC.DEF * MID(CUST.GHI.JKL,12,34)) + mid(CUST.ABC.DEF,10,34)
IF(CUST.ABC.DEF != CUST.GHI.JKL) THEN
PRINTF("CAME HERE")
CUST.GHI.JKL = CUST.GHI.JKL + 1
ENDIF

Then , I need to do following three modifications in the file FILE1:

1) I need to delete all lines with PRINTF statements.
2) I need to modify all instances of small "mid" word with capital "MID".
3) I need to insert a line containing "{" after line with IF statement.

I need to all above operations without reading file line by line to avoid performance issues because file may contain more than 10000 lines. And for the same reason, I want to avoid usage of temporary file.

Can anyone please suggest solution for stated problem ?
Code:
awk '/PRINTF/{print ""}/mid/{sub(/mid/,"MID")}/IF/{sub(/IF/,"IF\n\{")}/ENDIF/{sub/ENDIF/,"ENDIF\n\}")}1'

You have missed that you also require a "}" after an "ENDIF" So I have introduced it manually. seeing that you forgot it.

Regards.
# 3  
Old 12-18-2009
Code:
gawk '!/PRINTF/{
    gsub("mid","MID")
    if($0~/IF/){
        flag=1
        print
        next
    }
    print
}
flag{ print "{" ;flag=0} ' file

# 4  
Old 12-19-2009
And here's one way to do it with Perl:

Code:
$
$ cat f5
CUST.ABC.DEF = CUST.ABC.DEF * CUST.ABC.DEF
PRINTF(CUST.ABC.DEF)
CUST.ABC.DEF =  mid(CUST.ABC.DEF,10.34)
PRINTF("HOWDY")
CUST.GHI.JKL = (CUST.ABC.DEF * MID(CUST.GHI.JKL,12,34)) + mid(CUST.ABC.DEF,10,34)
IF(CUST.ABC.DEF != CUST.GHI.JKL) THEN
PRINTF("CAME HERE")
CUST.GHI.JKL = CUST.GHI.JKL + 1
ENDIF
$
$ perl -lne 'if (!/PRINTF/){s/mid/MID/g; print $_,/\bIF\b/ ? "\n{" : ""}' f5
CUST.ABC.DEF = CUST.ABC.DEF * CUST.ABC.DEF
CUST.ABC.DEF =  MID(CUST.ABC.DEF,10.34)
CUST.GHI.JKL = (CUST.ABC.DEF * MID(CUST.GHI.JKL,12,34)) + MID(CUST.ABC.DEF,10,34)
IF(CUST.ABC.DEF != CUST.GHI.JKL) THEN
{
CUST.GHI.JKL = CUST.GHI.JKL + 1
ENDIF
$
$

tyler_durden
# 5  
Old 12-19-2009
How about sed:
Code:
sed '/PRINTF/d;s/mid/MID/g;/IF/a}' infile

Output:
Code:
CUST.ABC.DEF = CUST.ABC.DEF * CUST.ABC.DEF
CUST.ABC.DEF =  MID(CUST.ABC.DEF,10.34)
CUST.GHI.JKL = (CUST.ABC.DEF * MID(CUST.GHI.JKL,12,34)) + MID(CUST.ABC.DEF,10,34)
IF(CUST.ABC.DEF != CUST.GHI.JKL) THEN
}
CUST.GHI.JKL = CUST.GHI.JKL + 1
ENDIF
}


Last edited by Scrutinizer; 12-19-2009 at 08:02 AM..
# 6  
Old 12-19-2009
If you can use Python
Code:
#!/usr/bin/env python
for line in open("file"):
    if not "PRINTF" in line:
        line=line.rstrip()
        line=line.replace("mid","MID")
        if "IF" in line:
            print "%s\n%s" % ( line, "{")
            continue
        print line

output
Code:
$ ./python.py
CUST.ABC.DEF = CUST.ABC.DEF * CUST.ABC.DEF
CUST.ABC.DEF =  MID(CUST.ABC.DEF,10.34)
CUST.GHI.JKL = (CUST.ABC.DEF * MID(CUST.GHI.JKL,12,34)) + MID(CUST.ABC.DEF,10,34)
IF(CUST.ABC.DEF != CUST.GHI.JKL) THEN
{
CUST.GHI.JKL = CUST.GHI.JKL + 1
ENDIF
{

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Getting lines between patterns and perform operations

Hi, I'm currently dev'ing using awk and I'm currently stuck. Here's the file, with comments on "<--- ": Record <--- First Pattern Amount 1 <--- Amount on first transaction TotalSales 0 <--- Total Sales Prior from previous transactions Time 1:00:00 <--- Time... (9 Replies)
Discussion started by: Jin_
9 Replies

2. Shell Programming and Scripting

Taking the averages of columns with deletion of some lines

Hi, I am in stage of post processing some of my results. I wanted to plot the data against the three axis x,y,z. The data file is quite complicated and i have to take the average of x, y,z over different steps of my test. A typical file look like below: Time taken:4s No.of series : 3... (6 Replies)
Discussion started by: begin_shell
6 Replies

3. Shell Programming and Scripting

awk modification for lines

so i have this data in a file: jime=1860,yime=1.23243,lime= jime=1859,yime=1.23018,lime= jime=1825,yime=1.15371,lime= jime=1849,yime=1.20769,lime= jime=1841,yime=1.1897,lime= jime=1849,yime=1.20769,lime= i use this code to calculate the percentage difference of the number in column 2... (9 Replies)
Discussion started by: SkySmart
9 Replies

4. Shell Programming and Scripting

Text file insertion via sed

I have 800+ html files that need to have a javascript added to them in the head. I can do the looping, setting filenames as variables, etc. but I cannot figure out how to insert my javascript file into the html. My javascript is in a file named jsinsert.txt It basically has this format:... (4 Replies)
Discussion started by: Trapper
4 Replies

5. UNIX for Advanced & Expert Users

Insertion of Null Character while writing into file

I have a huge file with record length around 5000 characters. There is an ETL tool datastage which is writing this data to the file(AIX server). At position 4095 i have seen NULL Character(^@). when i am using this command "head -1 file_nm | sed 's/\000//g'" --- the output is displaying... (3 Replies)
Discussion started by: issaq84mohd
3 Replies

6. Shell Programming and Scripting

Comparison and deletion of lines between two files

Hi i need an help. I have two files list1 and list2, both contains the server names i want to delete the servers in list2 which were also found in list1. for an eg list2 list1 oradg1 oradg4 oradg2 oradg2 oradg3 ... (5 Replies)
Discussion started by: sudharson
5 Replies

7. Shell Programming and Scripting

Insertion in a file

Hi All, I want to insert a line just befor the lst line in a file. please can anyone advise. Cheers, Shazin (3 Replies)
Discussion started by: Shazin
3 Replies

8. UNIX for Dummies Questions & Answers

deletion of all lines ends with :

I have below file say temp1 BSCAJM1:HWJA10C BSCAJM1: BSCALW1: BSCALW1:GVND01B BSCALW1: BSCALW1: BSCBKNR:IJNMKTA BSCBKNR: BSCJOD1: BSCJOD1:JOD121B i want to delete all the lines ending with : and have below output BSCAJM1:HWJA10C BSCALW1:GVND01B BSCBKNR:IJNMKTA... (8 Replies)
Discussion started by: lalchand
8 Replies

9. Shell Programming and Scripting

Deletion of lines in a text file

Hi Everyone, Please help me with this. I have gone through many posts here but couldn't find what I wanted. I have a file with 79000+ lines and I want to delete lines in a pattern. I want to delete every 141st line in the file, starting from line 2000 till 50000. Please help guys. ... (8 Replies)
Discussion started by: max29583
8 Replies

10. Shell Programming and Scripting

Remove & insertion of data in a same file

I am iterating record by record through a file as below, A,B A,C A,D B,E B,F E,G E,H The same file should look like in the final output as below, A,B B,E E,G E,H B,F A,C A,D (10 Replies)
Discussion started by: videsh77
10 Replies
Login or Register to Ask a Question