Werte aus xml extrahieren mit awk oder sed

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Werte aus xml extrahieren mit awk oder sed

Beitrag von Voyager_MP » 14.10.2009 14:44:04

Code: Alles auswählen

michel@mplinux:~/scripts => curl -silent 'http://10.2.4.220/cmd-fw?SESSION=123123fesdf2&SLOT=13&SESSION=123123fesdf2&ACTION=Details'                                                                                                        [14:35:59]
HTTP/1.1 200 OK
Date: Thu, 14 Oct 2009 12:36:50 GMT
Content-type: text/xml; charset=UTF-8
Content-length: 567

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="fw.xsl"?>
<DATA STYLESHEET="om.css" UID="0" SESSION="123123fesdf2"><FW><COMP SLOT="13" NAME="" ARCH="eneric-x"><SYS><IMG IDX="0" VERSION="2.9.0" DATE="2009-08-10 20:02:41" SIZE="2494842"/><IMG IDX="1" VERSION="2.8.11" DATE="2009-05-20 11:16:18" SIZE="2428433" ACT="1"/><IMG IDX="2" VERSION="2.8.12" DATE="2009-10-10 21:26:46" SIZE="2431827"/></SYS><DOWNLOAD STATUS="2" URL="tftp://10.1.0.8/eneric-x-2.8.12-20091010.bin" RX="2431827" FL="1310720"/></COMP></FW></DATA>% 
kann mir jemand einen tip geben, wie ich am besten an 3 werte aus dem xml komme.

SIZE="2431827" RX="2431827" FL="1310720"

im moment hole ich mir den 2ten wert so, das ist aber sehr unsauber und geht auch nicht immer.

sed -ne 's/.*\" RX=\(.*\)\/><\/COMP.*/\1/p' | sed -e 's,",,g' -e s,FL=,,g


danke
Gruß Michel

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von pinguino » 14.10.2009 18:01:56

was zeigt ?:

Code: Alles auswählen

egrep "<DOWNLOAD.*" a | awk '{print $NF}'
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von ThorstenS » 14.10.2009 18:09:36

pinguino meint nicht $NF sondern nur NF - das steht für number of fields.
Bei dir kommt - wenn ich das richtig sehe - 27 raus.
Sind die Zeilen immer so aufgebaut? Ich vermutet mal nicht, wenn du sagst, dass es manchmal nicht klappt...

Benutzeravatar
pinguino
Beiträge: 147
Registriert: 23.01.2007 23:11:46

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von pinguino » 14.10.2009 18:13:01

du kannst das auch versuchen:

Für FL:

Code: Alles auswählen

 grep -o "FL=\".*\"" datei
Für RX:

Code: Alles auswählen

grep -o "RX=\".*\"" datei
Für SIZE:

Code: Alles auswählen

grep -o "SIZE=\".*\"" datei | sed -n '2p'
Gruß

Pinguino

>>Nota bene<<

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von ThorstenS » 14.10.2009 18:39:22

Ich hab grad nicht mehr Zeit, aber ich denke das ist ausbaufähig:

Code: Alles auswählen

awk '{gsub(/\ |<|>|\//,"\n"); print}' flow.xml | awk '/RX|FL|SIZE/'
SIZE="2494842"
SIZE="2428433"
SIZE="2431827"
RX="2431827"
FL="1310720"

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von Voyager_MP » 16.10.2009 11:18:18

erstmal vielen dank

Im moment arbeite ich mit der loesung von thorsten "awk '{gsub(/\ |<|>|\//,"\n"); print}' flow.xml | awk '/RX|FL|SIZE/'"

leider ergibt sich ein problem, wenn in der wert ein komma hat, dann bekomme ich nur den inhalt vor dem komma.
z.b.

Code: Alles auswählen

michel@mplinux:~ => echo "<SYSTEM NAME="mpfal" CONTACT="Michel Pelzer, mp@atem.com" LOC="Buero, Aachen"/>" |  awk '{gsub(/\ |<|>|\//,"\n"); print}' | awk '/LOC/'        
LOC=Buero,
Gruß Michel

chrisbra
Beiträge: 122
Registriert: 19.10.2005 09:36:09
Wohnort: Sachsen-Anhalt
Kontaktdaten:

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von chrisbra » 16.10.2009 21:41:11

Code: Alles auswählen

chrisbra t41:~/sed [1031]% perl -lne 's/((?:SIZE)|(?:FL)|(?:RX))="([^"]*)"/print "$1=$2"/eeg;' temp.xml

SIZE=2494842
SIZE=2428433
SIZE=2431827
RX=2431827
FL=1310720
Meine Whishlist
:wq!

ben.a
Beiträge: 372
Registriert: 12.04.2007 18:42:57

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von ben.a » 17.10.2009 23:09:33

sed und awk moegen ja tolle programme sein, aber es gibt gute gruende, sie nicht zum lesen von xml-dateien zu verwenden.
ocaml hat einen sehr einfach zu bedienenden xml-parser names xml-light. das ist sicher weniger fehleranfaellig als regulaere ausdruecke.

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von GoKi » 18.10.2009 01:24:08

Wenn man den HTML Header mal weglässt, dann per xslt

Code: Alles auswählen

$ cat test.xsl 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="IMG">
<xsl:text>Size=</xsl:text><xsl:value-of select="@SIZE"/><xsl:text>
</xsl:text>
</xsl:template>

<xsl:template match="DOWNLOAD">
<xsl:text>Rx=</xsl:text><xsl:value-of select="@RX"/><xsl:text>
Fl=</xsl:text><xsl:value-of select="@FL"/><xsl:text>
</xsl:text>
</xsl:template>

</xsl:stylesheet>
$ xsltproc test.xsl data.xml 
Size=2494842
Size=2428433
Size=2431827
Rx=2431827
Fl=1310720
MfG GoKi
:wq

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Werte aus xml extrahieren mit awk oder sed

Beitrag von ThorstenS » 18.10.2009 20:05:06

wow, super saubere Lösung!

Antworten