parsing xml using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting parsing xml using awk
# 1  
Old 02-16-2009
parsing xml using awk

hello ,

i am trying to parse xml using awk however its a little bit tricky as i want

Code:
<databases>
                <source>
                        <host>prod</host>
                        <port>1522</port>
                        <tns>GP1</tns>
                        <user>P11</user>
                        <password>lXXXXX</password>
                </source>
                <target>
                        <host>bcp</host>
                        <port>1522</port>
                        <tns>PDG</tns>
                        <user>pg</user>
                        <password>yyyyy</password>
                </target>
        </databases>

i would like to get two strings from soource and target
sqlplus p11/XXXXXX@GP1
sqlplus pg/yyyyy@pdg

any advices ?
# 2  
Old 02-16-2009
Well, the trick is to use either the ">" or the "<" as your record separator.

Code:
 awk -v RS="<" {print} <<+ |\
 awk -F ">" '$1 ~ /^tns$/{TNS=$2}
             $1 ~ /^user$/{USER=$2}
             $1 ~ /^password$/{PW=$2}
             $1 ~ /^\/source$/{print TNS, USER, PW}'
<databases>
                <source>
                        <host>prod</host>
                        <port>1522</port>
                        <tns>GP1</tns>
                        <user>P11</user>
                        <password>lXXXXX</password>
                </source>
+

returns

Code:
GP1 P11 lXXXXX

The rest if formating the output - over to you.
# 3  
Old 02-16-2009
Base on OP data sample:
Code:
awk -F'[<|>]' '/tns/{t=$3}/user/{u=$3}/password/{printf "sqlplus %s/%s@%s\n",t,$3,u}' file

# 4  
Old 02-17-2009
Code:
nawk 'BEGIN{FS="[<|>]"}
/<tns>/{tns=$3}
/<user>/{user=$3}
/<password>/{printf("sqlplus %s/%s@%s\n",user,$3,tns)}' a.txt

# 5  
Old 02-17-2009
Hi danmero Image

Could you please explain your command details, how it works..
i did not exactly the meaning..

Thanks
Sha
# 6  
Old 02-17-2009
Works fine !! Many thanks...such a simple code :-)
# 7  
Old 02-17-2009
Quote:
Originally Posted by Shahul
Could you please explain your command details, how it works..
Code:
# awk -F'[<|>]' '                              # Set the field separator to < or >
/tns/        {                                 # If line contain word "tsn" 
                 t=$3                          # Assign the value of third field to variable n
               }
/user/       {                                 # If line contain word "user" 
                 u=$3                          # Assign the value of third field to variable u
               }
/password/{                                    # If line contain word "password"
                 printf \                      # I use printf to print the line
                 "sqlplus %s/%s@%s\n",\        # Format the print output
                 t,$3,u                        # Print variable t, value of $3 and variable u
               }
' file                                         # Input file

Next time you should ask the OP Smilie

Quote:
Originally Posted by amit1_x
Works fine !! Many thanks...such a simple code :-)
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Multiple command execution inside awk command during xml parsing

below is the output xml string from some other command and i will be parsing it using awk cat /tmp/alerts.xml <Alert id="10102" name="APP-DS-ds_ha-140018-componentFailure-S" alertDefinitionId="13982" resourceId="11427" ctime="1359453507621" fixed="false" reason="If Event/Log Level(ANY) and... (2 Replies)
Discussion started by: vivek d r
2 Replies

2. Shell Programming and Scripting

XML: parsing of the Google contacts XML file

I am trying to parse the XML Google contact file using tools like xmllint and I even dived into the XSL Style Sheets using xsltproc but I get nowhere. I can not supply any sample file as it contains private data but you can download your own contacts using this script: #!/bin/sh # imports... (9 Replies)
Discussion started by: ripat
9 Replies

3. 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

4. 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

5. 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

6. 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

7. 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

8. Shell Programming and Scripting

Parsing xml using awk - more help needed

As per another thread - https://www.unix.com/shell-programming-scripting/81027-how-can-i-parse-xml-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+=$3}END {for (i in a)print v,i,a}' file Can... (6 Replies)
Discussion started by: frustrated1
6 Replies

9. 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

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
Login or Register to Ask a Question