Visit Our UNIX and Linux User Community


Parsing xml using awk - more help needed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing xml using awk - more help needed
# 1  
Old 09-15-2008
Parsing xml using awk - more help needed

As per another thread - https://www.unix.com/shell-programmin...ml-file-2.html
I am using the following to extract the Subaccid and RecAccTotal from the xm file below

awk -v v=SubaccId -F'[<|>]' '$2==v{s=$3;getline;a[s]+=$3}END {for (i in a)print v,i,a[i]}' file


Can you tell me how I need to modify this if there are more fields in the xml response? (ie. for the RedAccType below)

ie. if there was additional information in a different response as below in red what do I need to change in the awk code?


XML FILE
<RecSubaccs>

<RecSubacc>
<SubaccId>1</SubaccId>
<RecAccTotal>0</RecAccTotal>
<RedAccType>Perm</RedAccType>
</RecSubacc>

<RecSubacc>
<SubaccId>2</SubaccId>
<RecAccTotal>0</RecAccTotal>
<RedAccType>Perm</RedAccType>
</RecSubacc>

<RecSubacc>
<SubaccId>3</SubaccId>
<RecAccTotal>0</RecAccTotal>
<RedAccType>Perm</RedAccType>
</RecSubacc>

</RecSubaccs>
# 2  
Old 09-15-2008
If you do this in perl, you can create an array where each element in the array is a hash. (An array of hashes)
For the first RecSubacc, you'll have the following hash variables:
SubaccId 1
RecAccTotal 0
RedAccType Perm
As the file is read, if there are additional fields that appear between <RecSubacc> and </recSubacc>, it will simply create another hash.

You would use only the keys that you require - this would allow you to reuse those other keys at a later date, if your requirements change, without re-writing the entire script.

Just a thought....

Last edited by avronius; 09-15-2008 at 11:04 AM.. Reason: added bracketed text
# 3  
Old 09-15-2008
Quote:
Originally Posted by frustrated1
Can you tell me how I need to modify this if there are more fields in the xml response? (ie. for the RedAccType below)

ie. if there was additional information in a different response as below in red what do I need to change in the awk code?
Can you provide more sample data and the expected output.
# 4  
Old 09-15-2008
I've tuned your code slightly:

Code:
awk -v v=SubaccId -F'[<|>]' '$2==v{s=$3;getline;a[s]+=$3;getline;t[s]=$3}END {for (i in a)print v,i,a[i],t[i]}' file

Regards
# 5  
Old 09-15-2008
Quote:
Originally Posted by Franklin52
I've tuned your code slightly:

Code:
awk -v v=SubaccId -F'[<|>]' '$2==v{s=$3;getline;a[s]+=$3;getline;t[s]=$3}END {for (i in a)print v,i,a[i],t[i]}' file

Regards

Perfect - thanks. Works as I needed.
# 6  
Old 09-15-2008
Working with XML files -
using all these tools like awk, shell scripting, sed everything would work

But IMHO
they are not maintainable,
quite difficult if you had to do some modification (just extend XPath or append something to the root element for example ),
will take more time for modification and testing.
In short, its not supported.

Instead there are wonderful perl modules available from CPAN.

Though, the initial time spent on learning and figuring out is more, its worth spending the time.

But for quick win cases, 1 time runs - all these awk/sed/shell scripting should be fine.

When the scripts that work on XML files need to be productionized or need to address a big set of file base, then they are not scalable way of doing them.

Smilie
# 7  
Old 09-15-2008
Quote:
Originally Posted by matrixmadhan
Working with XML files -
using all these tools like awk, shell scripting, sed everything would work
Smilie
xgawk

Previous Thread | Next Thread
Test Your Knowledge in Computers #117
Difficulty: Easy
BSD (Berkley Software Distribution) is not an example of an OS derived from Unix.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

XML Parsing using awk

Hi All, I have a problem to resolve. For following XML file, I need to parse the values based on Tag Name. I would prefer to use this by awk. I have used sed command to replace the tags (s/<SeqNo>//). In this case there can be new tags introduced. So need to parse it based on Tag Name. Any... (9 Replies)
Discussion started by: Tons
9 Replies

2. Shell Programming and Scripting

xml parsing with awk

hi all.. need your help again.. i have xml file and i want to parsing some data from the xml file.. <ex-name="keroco"> <................> <................> <................> <br-name="cincai"> <ship="123456"> <...................> ... (3 Replies)
Discussion started by: buncit8
3 Replies

3. Shell Programming and Scripting

XML parsing using nawk help needed

i need one help, below is one more xml file with diff pattern i tried it but dint get it , iam sure its a peice of cake for you guys. <xn:MeContext id="LSVLKY001"> <xn:ManagedElement id="1"> <un:RncFunction id="1"> <un:UtranCell... (2 Replies)
Discussion started by: tech_frk
2 Replies

4. Shell Programming and Scripting

Help needed for parsing large XML with awk.

My XML structure looks like: <?xml version="1.0" encoding="UTF-8"?> <SearchRepository> <SearchItems> <SearchItem> ... </SearchItem> <SearchItem> ... ... (1 Reply)
Discussion started by: jasonjustice
1 Replies

5. Shell Programming and Scripting

Parsing XML in awk : OFS does not work as expected

Hi, I am trying to parse regular XML file where I have to reduce number of decimal points in some xml elements. I am using following AWK command to achive that : #!/bin/ksh EDITCMD='BEGIN { FS = ""; OFS=FS } { if ( $3 ~ "*\\.*" && length(substr($3,1+index($3,"."))) == 15 ) {... (4 Replies)
Discussion started by: martin.franek
4 Replies

6. Shell Programming and Scripting

parsing(xml) using nawk/awk

Hi , I have an xml format as shown below: <Info> <last name="sean" first name="john"/> <period="5" time="11"/> <test value="1",test2 value="2",test3 value="3",test4 value="5"> <old> <value1>1</value1> <value2>2</value2> </old> <new> <value1>4</value1> <value2>3</value2> </new>... (1 Reply)
Discussion started by: natalie23
1 Replies

7. Shell Programming and Scripting

parsing xml using awk

hello , i am trying to parse xml using awk however its a little bit tricky as i want <databases> <source> <host>prod</host> <port>1522</port> <tns>GP1</tns> <user>P11</user>... (6 Replies)
Discussion started by: amit1_x
6 Replies

8. Shell Programming and Scripting

parsing xml with awk/sed

Hi people!, I need extract from the file (test-file.txt) the values between <context> and </context> tag's , the total are 7 lines,but i can only get 5 or 2 lines!!:confused: Please look my code: #awk '/context/{flag=1} /\/context/{flag=0} !/context/{ if (flag==1) p rint $0; }'... (3 Replies)
Discussion started by: ricgamch
3 Replies

9. Shell Programming and Scripting

Help needed in writing awk script for xml source

Hi, i am not able to get an approach for converting xml file to flat file using awk programming. Can anyone help me out. The input xml is like this: <outer> <field1>one</field1> <field2>two</field2> <field3>three<Error Code=777 Description=12345/></field3> <field4>four</field4> </outer>... (2 Replies)
Discussion started by: naren_0101bits
2 Replies

10. UNIX for Dummies Questions & Answers

Parsing XML dynamic data via awk?

I am trying to use a line of output in an XML file as input in another new XML file for processing purposes via a shell script. Since I am a newbie though, I'm not sure how to do this since the data is different everytime. I am using this technique with static data right now: echo -n "Running... (5 Replies)
Discussion started by: corwin43
5 Replies

Featured Tech Videos