I need to convert below xml code to csv. I searched other posts as well but this post (_http://www.unix.com/shell-programming-scripting/174417-extract-parse-xml-data-statistic-value-csv.html) gives "sed command garbled" error. As of now I have written a long script to do it, but can it be done with single sed command.??
XML :
<ticketing>
<ticketingProduct name="Prod 4">
<ticketingEvent>Prod 4 - Event 1</ticketingEvent>
<ticketingEvent>Prod 4 - Event 2</ticketingEvent>
<ticketingEvent>Prod 4 - Event 3</ticketingEvent>
</ticketingProduct>
<ticketingProduct name="Prod 3">
<ticketingEvent>Prod 3 - Event 1</ticketingEvent>
<ticketingEvent>Prod 3 - Event 2</ticketingEvent>
</ticketingProduct>
<ticketingProduct name="Prod 2">
<ticketingEvent>Prod 2 - Event 1</ticketingEvent>
</ticketingProduct>
<ticketingProduct name="Prod 1">
<ticketingEvent>Prod 1 - Event 1</ticketingEvent>
<ticketingEvent>Prod 1 - Event 2</ticketingEvent>
</ticketingProduct>
</ticketing>
and what i need is
Prod 4,Prod 4 - Event 1
Prod 4,Prod 4 - Event 2
Prod 4,Prod 4 - Event 3
Prod 3,Prod 3 - Event 1
Prod 3,Prod 3 - Event 2
Prod 2,Prod 2 - Event 1
Prod 1,Prod 1 - Event 1
Prod 1,Prod 1 - Event 2
basically its in format ticketingProduc, ticketingEvent
any suggestion is appreciated..
perl -ne '
if (/<ticketingProduct name/../<\/ticketingProduct>/) {
if (/<ticketingProduct name/) { s/.*?"(.*?)"./$1/; $x = $1 }
if (/<ticketingEvent>/) { s|<ticketingEvent>(.*?)</ticketingEvent>|$1|; $y = $1; print "$x,$y\n" }
}' inputfile
In nawk ..
$ nawk -F'[<>]' '/<ticketingEvent/{split($3,a,"-");print a[1]","$3}' infile
1 Like
Thanks balajesuri but perl isn't availanle. Sorry I didnt mentioned it before.
Thanks jayan but can you please make me understand this code.?? I am not comfortable with awk. Can this be done with sed command.??
Also i see this code doesnt produce desired output when productname isn't repeating in event name. For-example it doesnt give desired output for below code:
<ticketing>
<ticketingProduct name="Prod 1">
<ticketingEvent>Event 1</ticketingEvent>
<ticketingEvent>Event 2</ticketingEvent>
<ticketingEvent>Event 3</ticketingEvent>
</ticketingProduct>
<ticketingProduct name="Prod 2">
<ticketingEvent>Event 1</ticketingEvent>
<ticketingEvent>Event 2</ticketingEvent>
</ticketingProduct>
<ticketingProduct name="Prod 3">
<ticketingEvent>Event 1</ticketingEvent>
<ticketingEvent>Event 2</ticketingEvent>
<ticketingEvent>Event 3</ticketingEvent>
</ticketingProduct>
<ticketingProduct name="Prod 4">
<ticketingEvent>Event 1</ticketingEvent>
<ticketingEvent>Event 2</ticketingEvent>
<ticketingEvent>Event 3</ticketingEvent>
<ticketingEvent>Event 4</ticketingEvent>
</ticketingProduct>
</ticketing>
You don't have Perl!!!!!!!! Which esoteric *nix system is that, which has awk and not Perl?
dont get angry buddy. What i mean to say is- perl should not be used. It should be ksh only. Its weird but quality gp has set such guidelines...
I'm just kidding mate No worries. I understood the meaning of 'perl isnt available' as 'i dont have perl on my system'. My bad..
aigles
January 19, 2012, 3:14am
8
awk '
BEGIN { FS="[<>]"; OFS="," }
/name=/ { sub(/.*="/, "", $2); Name = substr($2, 1, length($2)-1); next }
$2=="ticketingEvent" { print Name,$3; next }
' inputfile
Jean-Pierre.