Sponsored Content
Full Discussion: awk parsing problem
Top Forums Shell Programming and Scripting awk parsing problem Post 302164199 by radoulov on Monday 4th of February 2008 06:32:50 AM
Old 02-04-2008
Quote:
Originally Posted by timj123
[...]
radoulov,
I am having trouble following your logic, it looks like there are "shortcuts" in your script that I am having problem deciphering. Can you explain your script for me.
[...]
Of course.
First, I would change the code to:

Code:
awk '
  /^CP/ { 
        print 
        f++     
        }

  f     { 
        if ($0 ~ /TCS /) { 
                if (edm) { 
                        printf "----\n%-8s %-8s\n", tcs, edm
                        edm = ""
                        }
                tcs = (($1) FS ($2))
                }
        if ($0 ~ /EDM|WRC|wrc/) { 
                getline 
                edm += $1 + $2 
                edmt += $1 + $2 
                }
        if (! NF) { 
                printf "%-8s %-8s\nTotal:   %-8s\n\n", tcs, edm, edmt
                f = tcs = edm = edmt = ""
                }
        }
' input

The logic is quite simple, here we go:

Code:
  /^CP/ { 
        print 
        f++     
        }

For every record that matches the pattern ^CP: print it and increment the value of the parameter f. We only need a flag, you can use flag = "true" if you consider it more readable.

Code:
  f     { 
        if ($0 ~ /TCS /) { 
                if (edm) { 
                        printf "----\n%-8s %-8s\n", tcs, edm
                        edm = ""
                        }
                tcs = (($1) FS ($2))
                }

For every record for which our flag is true, has value different than zero or null - the f by itself (here we are in your logical record/block):
+ if the record matches the pattern TCS<space>:
++ if the parameter edm is true (see below), then print the values of the parameters tcs and edm, then unset edm (set it to "", false)
++ set the parameter tcs to the values of $1 FS and $2.

Code:
        if ($0 ~ /EDM|WRC|wrc/) { 
                getline 
                edm += $1 + $2 
                edmt += $1 + $2 
                }

+ if the record matches the pattern EDM|WRC|wrc (EDM OR WRC OR wrc) go to the next line (getline) and:
++ increment edm and edmt (total) with the sum of $1 and $2.


Code:
        if (! NF) { 
                printf "%-8s %-8s\nTotal:   %-8s\n\n", tcs, edm, edmt
                f = tcs = edm = edmt = ""
                }

+ if the record has no fields (a blank line, the end of your logical record/block), print the values of
tcs, edm, edmt (total) and unset f, tcs, edm and edmt.


 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Parsing problem

I need to separate out the contents in the string "xyz","1233","cm_asdfasdf" as xyz,1233,cm_asdfasdf Can anyone help me on this?? (1 Reply)
Discussion started by: Sushir03
1 Replies

2. Shell Programming and Scripting

Parsing problem

Hi, i need to parse a string which looks like this "xyz","1233","cm_asdfasdf" (2 Replies)
Discussion started by: Sushir03
2 Replies

3. Shell Programming and Scripting

Parsing problem

I need to parse a string which looks like "xyx","sdfsdf","asf_asdf" into var1="xyx" var2="sdfsdf" var3="asf_asdf" (3 Replies)
Discussion started by: Sushir03
3 Replies

4. Shell Programming and Scripting

Parsing Problem

Hi all, I am having problems parsing the following file: cat mylist one,two,three four five,six My goal is to get each number on a seperate line. one two three four five six I tried this command: sed -e 's/\,/^M/g' mylist (11 Replies)
Discussion started by: rob11g
11 Replies

5. Shell Programming and Scripting

Another parsing line awk or sed problem

Hi, After looking on different forums, I'm still in trouble to parse a parameters line received in KSH. $* is equal to "/AAA:111 /BBB:222 /CCC:333 /DDD:444" I would like to parse it and be able to access anyone from his name in my KSH after. like echo myArray => display 111 ... (1 Reply)
Discussion started by: RickTrader
1 Replies

6. Shell Programming and Scripting

Parsing problem

Hello, I have a similar problem so I continue this thread. I have: my_script_to_format_nicely_bdf.sh | grep "RawData" |tr -s ' '|cut -d' ' -f 4|tr -d '%' So it supposed to return the percentage used of RawData FS: 80 (Want to use it in a alert script) However I also have a RawData2 FS so... (17 Replies)
Discussion started by: drbiloukos
17 Replies

7. Homework & Coursework Questions

Problem parsing input with awk

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: I want add a line.For example:- 123456 1 1 0 1 1 0 1 0 0 0 1 5 8 0 12 10 25 its answer... (4 Replies)
Discussion started by: Arsh10
4 Replies

8. Shell Programming and Scripting

Complex text parsing with speed/performance problem (awk solution?)

I have 1.6 GB (and growing) of files with needed data between the 11th and 34th line (inclusive) of the second column of comma delimited files. There is also a lot of stray white space in the file that needs to be trimmed. They have DOS-like end of lines. I need to transpose the 11th through... (13 Replies)
Discussion started by: Michael Stora
13 Replies

9. Shell Programming and Scripting

Problem parsing

Hi, I want to fetch a text.Clipping. ... (5 Replies)
Discussion started by: protocomm
5 Replies

10. Shell Programming and Scripting

awk parsing problem

Hello fellow unix geeks, I am having a small dilemna trying to parse a log file I have. Below is a sample of what it will look like: MY_TOKEN1(group) TOKEN(other)|SSID1 MY_TOKEN2(group, group2)|SSID2 What I need to do is only keep the MY_TOKEN pieces and where there are multiple... (7 Replies)
Discussion started by: dagamier
7 Replies
All times are GMT -4. The time now is 01:01 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy