2010-09-19 5 views
1

J'ai un fichier xml comme suit:Comment trier les valeurs spécifiques à partir d'un fichier xml

<Exchange DateTime="17/09/2010 18:00:00"> 
<Content Percent="0.20" Price="63.862" Sign="1"/> 
<Content Percent="0.25" Price="80.989" Sign="1"/> 
<Content Percent="0.07" Price="1.4970" Sign="1"/> 
<Content Percent="-0.31" Price="1.9530" Sign="-1"/> 
</Exchange> 

Il y a 4 variables appelées A, B, C, D.

J'ai besoin d'un script qui sort comme suit:

Last update: 17/09/2010 18:00:00 
A: 63.862 (% 0.20) 
B: 80.989 (% 0.25) 
C: 1.4970 (% 0.07) 
D: 1.9530 (% -0.31) 

Est-ce possible? Eh bien, je vraiment besoin que pour mon travail :(S'il vous plaît aidez-moi, ppl. J'apprécie vraiment votre aide !!

+0

Il est impossible d'ajouter des informations qui ne sont pas présentes dans l'entrée, ce qui rendra les monnaies difficiles. Comment dérivez-vous les abréviations de devises appropriées à afficher? –

+0

D'où proviennent ces variables (IMKB, SD, USD, EUR)? – jcubic

Répondre

0
#!/bin/bash 
echo Last update: `grep -o 'DateTime="[^"]*"' $1 | sed -e 's/DateTime="\([^"]*\)"/\1/'` 
grep -o 'Percent="[^"]*" Price="[^"]*"' $1 | 
     sed -e 's/Percent="\([^"]*\)" Price="\([^"]*\)"/: \2 (% \1)/' 

Cette affiche

Last update: 17/09/2010 18:00:00 
: 63.862 (% 0.20) 
: 80.989 (% 0.25) 
: 1.4970 (% 0.07) 
: 1.9530 (% -0.31) 

ne savais pas ce que IMKB, USD et EUR signifie, si elles sont basées sur le pourcentage, vous pouvez utiliser cette

#!/bin/bash 
echo Last update: `grep -o 'DateTime="[^"]*"' $1 | sed -e 's/DateTime="\([^"]*\)"/\1/'` 
grep -o 'Percent="[^"]*" Price="[^"]*"' $1 | 
     sed -e 's/Percent="\([^"]*\)" Price="\([^"]*\)"/: \2 (% \1)/' | 
     sed -e 's/\(.*(% 0.20)\)/IMKB: \1/' | 
     sed -e 's/\(.*(% 0.07)\)/USD: \1/' | 
     sed -e 's/\(.*(% -0.31)\)/EUR: \1/' 

au-dessus affiche

Last update: 17/09/2010 18:00:00 
IMKB: : 63.862 (% 0.20) 
: 80.989 (% 0.25) 
USD: : 1.4970 (% 0.07) 
EUR: : 1.9530 (% -0.31) 

Je ne connaissais pas très bien la sed donc il y a une solusion simple et plus courte en utilisant seulement sed.

Mise à jour ceci est une version plus courte

#!/bin/bash 

echo Last update: `grep -o 'DateTime="[^"]*"' $1 | sed -e 's/DateTime="\([^"]*\)"/\1/'` 
grep -o 'Percent="[^"]*" Price="[^"]*"' $1 | sed -e 's/Percent="\([^"]*\)" Price="\([^"]*\)"/: \2 (% \1)/' -e 's/\(.*(% 0.20)\)/IMKB\1/' -e 's/\(.*(% 0.07)\)/USD\1/' -e 's/\(.*(% -0.31)\)/EUR\1/' -e 's/\(.*(% 0.25)\)/SD\1/' 

 

Last update: 17/09/2010 18:00:00 
IMKB: 63.862 (% 0.20) 
SD: 80.989 (% 0.25) 
USD: 1.4970 (% 0.07) 
EUR: 1.9530 (% -0.31) 
+0

Eh bien, ces centiles ne sont pas statiques, donc je ne peux pas utiliser votre 2ème solution. Il y a 4 variables appelées IMKB, SD, USD, EUR et je veux qu'elles soient affichées au début des lignes. Eh bien, merci, cependant. C'est vraiment beaucoup mieux que rien, mon ami. –

+0

d'autres idées? –

0

http://cnnturk.com/finans/ticker/endeks.asp est où je reçois le fichier XML, mais il n'a pas les nouvelles lignes, donc je ne suis pas en mesure d'utiliser votre solution tout en utilisant curl :(

Mon but est de venir avec esprit h un script shell qui rassemble les données de l'adresse mentionnée ci-dessus et affiche ensuite des informations sur les prix et les variations de prix de l'indice boursier, de l'or, des USD et de l'euro. Pour ce faire, je dois utiliser curl, awk, sed et grep, mais je n'arrive pas à comprendre comment cela nécessite une utilisation complexe des compétences de programmation shell.

-1

espérons que cela aide. Même si je suis un débutant en Perl.J'ai essayé ma chance.

open CONFIG,"example.dat"; 
    while(<CONFIG>) 
    { 
    if($.==1) 
    { 
    s/.*\"(\d+\/\d+\/\d+ \d+:\d+:\d+)\".*$/Last update: $1/g; 
    } 
    if($.==2) 
    { 
    s/.*\"(-?\d+\.?\d+).*\"(\d+\.?\d+)\".*$/A: $2 (% $1)/g; 
    } 
    if($.==3) 
    { 
    s/.*\"(-?\d+\.?\d+).*\"(\d+\.?\d+)\".*$/B: $2 (% $1)/g; 
    } 
    if($.==4) 
    { 
    s/.*\"(-?\d+\.?\d+).*\"(\d+\.?\d+)\".*$/C: $2 (% $1)/g; 
    } 
    if($.==5) 
    { 
    s/.*\"(-?\d+\.?\d+).*\"(\d+\.?\d+)\".*$/D: $2 (% $1)/g; 
    } 
    s/<\/exchange>//i; 
    print ; 
    } 


close CONFIG; 
Questions connexes