Calculer un pourcentage script shell sed,awk.
Résolu/Fermé
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
-
16 mai 2008 à 14:41
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 18 mai 2008 à 21:03
pcsystemd Messages postés 702 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 6 novembre 2024 - 18 mai 2008 à 21:03
A voir également:
- Calculer un pourcentage script shell sed,awk.
- Script vidéo youtube - Guide
- Comment calculer la moyenne sur excel - Guide
- Excel camembert pourcentage - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Comment calculer un pourcentage - Guide
10 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 mai 2008 à 16:56
16 mai 2008 à 16:56
Salut,
Dans ton script (qui ressemble à quelque chose près à ça pour ceux qui n'aurait pas suivi...), rajoute un truc du genre :
puis dans la partie "sed" :
et dans ton TEMPLATE :
et ça devrait le faire ;-))
Dans ton script (qui ressemble à quelque chose près à ça pour ceux qui n'aurait pas suivi...), rajoute un truc du genre :
POURCENTAGE1=$(echo "scale=2;($CONFI - $CONFIOLD) * 100 / $CONFIOLD" | bc -l) POURCENTAGE2=$(echo "scale=2;($SIMPL - $SIMOLD) * 100 / $SIMOLD" | bc -l)
puis dans la partie "sed" :
s/\bPOURCENTAGE1\b/${POURCENTAGE1}/ s/\bPOURCENTAGE2\b/${POURCENTAGE2}/
et dans ton TEMPLATE :
nombre de votants simples : VENTE (contre VENTEOLD en DATEOLD soit POURCENTAGE1%) nombre de votants doubles : LOC (contre LOCOLD en DATEOLD soit POURCENTAGE2%)
et ça devrait le faire ;-))
asevere
Messages postés
13089
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
16 mai 2008 à 15:34
16 mai 2008 à 15:34
Bonjour,
Je suis sympa, voilà une piste avec sed ET awk :-)
Piste:
Exemple:
Je suis sympa, voilà une piste avec sed ET awk :-)
Piste:
~$ echo "nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )" |sed -r -n 's/(nombre de votes [a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\))/\1|\2|\3|\4/p' |awk 'BEGIN{ FS = "|" }{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 }'
Exemple:
~$ cat plop Bonjour, Voici les stats au DATE Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 ) ~$ sed -r 's/(nombre de votes [a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\))/\1|\2|\3|\4/' plop |awk 'BEGIN{ FS = "|" }/nombre de vote/{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 }!/nombre de vote/{ print $0 }' Bonjour, Voici les stats au DATE Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +7,67% ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 soit +14,48% )
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
16 mai 2008 à 16:28
16 mai 2008 à 16:28
Merci beaucoup pour la piste,
je vais l'étudier afin de la comprendre d'une part puis après voir comment je peux l'appliquer dans mon script car je dois appliquer cela sur une dizaine de lignes que contient mon fichier
je vais l'étudier afin de la comprendre d'une part puis après voir comment je peux l'appliquer dans mon script car je dois appliquer cela sur une dizaine de lignes que contient mon fichier
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
16 mai 2008 à 17:11
16 mai 2008 à 17:11
Merci beaucoup jipicy,
mais j'ai une question .De la maniére que tu m'indiques je dois déclaré une variable POURCENTAGE pour chaque lignes. Je pense qu'il doit être possible d'appliquer cela directement au fichier avant de l'envoyer au lieu de déclarer autant de variables !!Non?
mais j'ai une question .De la maniére que tu m'indiques je dois déclaré une variable POURCENTAGE pour chaque lignes. Je pense qu'il doit être possible d'appliquer cela directement au fichier avant de l'envoyer au lieu de déclarer autant de variables !!Non?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 mai 2008 à 17:20
16 mai 2008 à 17:20
Ben on déclare 2 variables de plus c'est tout, afin d'agrémenter ton TEMPLATE.
Si tu choisis la façon d'asevere, il te faudra passer par un fichier temporaire en sortie sur lequel tu appliqueras les commandes données, puis tu enverras ce fichier avant de le détruire, non ?
Si tu choisis la façon d'asevere, il te faudra passer par un fichier temporaire en sortie sur lequel tu appliqueras les commandes données, puis tu enverras ce fichier avant de le détruire, non ?
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 mai 2008 à 00:15
17 mai 2008 à 00:15
Bin non car j'ai donné pour exemple que deux lignes mais j'ai au moins 10 lignes a traiter donc il faut que je declare une variable par lignes d'apres ton exemple si j'ai bien compris
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
17 mai 2008 à 00:51
17 mai 2008 à 00:51
Ben les 2 lignes que tu donnes ce sont les mêmes que dans le reste de ton script de départ, non ?
Le fait de rajouter le pourcentage n'est qu'une opération en plus par rapport au traitement initial, exact ?
Tout ce que j'ai fait, c'est de rajouter à ton script de départ 2 nouvelles variables, qui en plus sont le résultat basé sur le calcul de variables déjà existantes, ajouter 2 nouvelles lignes à la commande "sed" et rajouter 2 éléments à ton TEMPLATE.
Donc, ou j'ai mal compris ton besoin, ou on se comprend mal sur la finalité de la chose...
Dans ton script de départ la sortie envoyée par mail ressemblée à ça :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
et maintenant tu veux ça :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +20% )
nombre de votes double : 6523 ( contre 7698 en Avril 2008 soit - 37,2% )
Les autres valeurs tu les traites bien en une seule fois. Donc je vois pas où est le problème ?! ;-\
Le fait de rajouter le pourcentage n'est qu'une opération en plus par rapport au traitement initial, exact ?
Tout ce que j'ai fait, c'est de rajouter à ton script de départ 2 nouvelles variables, qui en plus sont le résultat basé sur le calcul de variables déjà existantes, ajouter 2 nouvelles lignes à la commande "sed" et rajouter 2 éléments à ton TEMPLATE.
Donc, ou j'ai mal compris ton besoin, ou on se comprend mal sur la finalité de la chose...
Dans ton script de départ la sortie envoyée par mail ressemblée à ça :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
et maintenant tu veux ça :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +20% )
nombre de votes double : 6523 ( contre 7698 en Avril 2008 soit - 37,2% )
Les autres valeurs tu les traites bien en une seule fois. Donc je vois pas où est le problème ?! ;-\
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 mai 2008 à 20:36
17 mai 2008 à 20:36
jipicy,
dans mon script de depart je n'avais mis que deux lignes pour exemple mais en fait la sortie envoyé par mail en comporte plus d'une dizaine il me faudrait donc déclarer 10 variables :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 )
nombre de votants double : 641( contre 598 en Avril 2008 )
Nombre de com simple et double au 16-05-2008 :
nombre de com simples : 1246 ( cnotre 11652 en Avril 2008 )
nombre de com double : 6523 ( contre 5698 en Avril 2008 )
etc..
donc :
POURCENTAGE1
POURCENTAGE2
POURCENTAGE3
POURCENTAGE4
POURCENTAGE5
POURCENTAGE6
etc...
Merci et bonne soirée
L'accés au savoir est la premiére liberté de l'homme.
dans mon script de depart je n'avais mis que deux lignes pour exemple mais en fait la sortie envoyé par mail en comporte plus d'une dizaine il me faudrait donc déclarer 10 variables :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 )
nombre de votants double : 641( contre 598 en Avril 2008 )
Nombre de com simple et double au 16-05-2008 :
nombre de com simples : 1246 ( cnotre 11652 en Avril 2008 )
nombre de com double : 6523 ( contre 5698 en Avril 2008 )
etc..
donc :
POURCENTAGE1
POURCENTAGE2
POURCENTAGE3
POURCENTAGE4
POURCENTAGE5
POURCENTAGE6
etc...
Merci et bonne soirée
L'accés au savoir est la premiére liberté de l'homme.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
17 mai 2008 à 22:59
17 mai 2008 à 22:59
Ok, je ne pouvais pas savoir.
Mais bon comme je te l'ai dit, tu déclares bien les autres variables et comme ces nouvelles variables (POURCENTAGEx) sont dépendantes des autres, j'entends par là qu'elles sont initialisées d'après les variables existantes, ça ne devrait pas poser de problèmes...
Si quelqu'un a mieux, je laisse volontiers la main ;-))
Mais bon comme je te l'ai dit, tu déclares bien les autres variables et comme ces nouvelles variables (POURCENTAGEx) sont dépendantes des autres, j'entends par là qu'elles sont initialisées d'après les variables existantes, ça ne devrait pas poser de problèmes...
Si quelqu'un a mieux, je laisse volontiers la main ;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 mai 2008 à 00:27
18 mai 2008 à 00:27
En fait on envoie un suite d'opération à effectuer à une calculatrice en ligne "bc".
echo
Pour envoyer la suite d'opérations comprise entre guillemets à "bc"
scale=2
Détermine le nombre de chiffre après la virgule en sortie. C'est une expression propre à "bc"
($CONFI - $CONFIOLD) * 100 / $CONFIOLD
On soustrait la valeur de $CONFIOLD de $CONFI qu'on multiplie par 100 et qu'on divise par la valeur de $CONFIOLD
| bc -l
Puis on passe le tout à "bc" (l'option "-l" pour définir la bibliothèque mathématique standard à employer)
Bon en y repensant, tu peux te servir du script d'asevere, mais il te faudra soit générer un fichier temporaire et le parser avec ledit script, soit intercaler le traitement en sortie entre la fin du filtrage par "sed" et l'envoi du mail...
echo
Pour envoyer la suite d'opérations comprise entre guillemets à "bc"
scale=2
Détermine le nombre de chiffre après la virgule en sortie. C'est une expression propre à "bc"
($CONFI - $CONFIOLD) * 100 / $CONFIOLD
On soustrait la valeur de $CONFIOLD de $CONFI qu'on multiplie par 100 et qu'on divise par la valeur de $CONFIOLD
| bc -l
Puis on passe le tout à "bc" (l'option "-l" pour définir la bibliothèque mathématique standard à employer)
Bon en y repensant, tu peux te servir du script d'asevere, mais il te faudra soit générer un fichier temporaire et le parser avec ledit script, soit intercaler le traitement en sortie entre la fin du filtrage par "sed" et l'envoi du mail...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
18 mai 2008 à 00:52
18 mai 2008 à 00:52
J'ai un souci je ne voit pas le script de asevere en totalite sur le forum il est couper sur la droite. Peux tu me le remttre si toi tu le voit en entier avec la partie de AWK. De plus est ce que cela qui suit te semple correct?
Ah oui dans ta façon de faire j'ai teste en console les resultats s'affichent sans le + ou le - devant selon le résultat ?
Merci encore
Ah oui dans ta façon de faire j'ai teste en console les resultats s'affichent sans le + ou le - devant selon le résultat ?
Merci encore
fi sed -e " s/\bCONFI\b/${CONFI}/ s/\bCONOLD\b/${CONOLD}/ s/\bSIMPL\b/${SIMPL}/ s/\bSIMOLD\b/${SIMOLD}/ " toto.tpl | sed -r 's/(nombre de votes [a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\ | mail -s "Envoi du ${DATE}" toto@toto.fr --L'accés au savoir est la premiére liberté de l'homme.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 mai 2008 à 10:59
18 mai 2008 à 10:59
Voilà le script d'Adrien adapté à tes besoins en partant de cet exemple en sortie...
Exemple :
Par contre il est vrai que dans ma façon de faire je n'ai pas le signe "+" qui s'affiche, par contre chez moi le signe "-" lui s'affiche ;-\
Exemple :
Bonjour, Voici les stats au 16-05-2008 : Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 ) Nombre de votants simple et double au 16-05-2008 : nombre de votants simples : 23546 ( contre 54652 en Avril 2008 ) nombre de votants double : 641 ( contre 598 en Avril 2008 ) Nombre de com simple et double au 16-05-2008 : nombre de com simples : 1246 ( contre 11652 en Avril 2008 ) nombre de com double : 6523 ( contre 5698 en Avril 2008 )Et le script :
sed -r ' s/(nombre .*[a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\))/\1|\2|\3|\4/ ' plop | awk ' BEGIN{ FS = "|" } /nombre /{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 } !/nombre /{ print $0 }'Voilà donc le code qu'il te faudrait intercaler comme tu l'as fait ci-dessus, mais sans le fichier "plop" ça va de soi ;-))
Par contre il est vrai que dans ma façon de faire je n'ai pas le signe "+" qui s'affiche, par contre chez moi le signe "-" lui s'affiche ;-\
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
18 mai 2008 à 12:52
18 mai 2008 à 12:52
Hélas cela ne fonctionne pas :
voici ma portion de script :
Bonjour,
Voici les stats au 16-05-2008 :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )soit +nan% nombre de votes simples : 57537 ( contre 57537 au 1er April 2008 ) soit +nan%
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 )
nombre de votants double : 641 ( contre 598 en Avril 2008 )soit +nan% nombre de votants doubles : 7513 ( contre 7513 au 1er April 2008 ) soit +nan%
Nombre de com simple et double au 16-05-2008 :
nombre de com simples : 1246 ( contre 11652 en Avril 2008 )
nombre de com double : 6523 ( contre 5698 en Avril 2008 )
voici ma portion de script :
sed -e " s/\bSIMPL\b/${SIMPL}/ s/\bSIMOLD\b/${SIMOLD}/ s/\bDATOLD\b/${DATOLD}/ " votes.tpl | sed -r ' s/(nombre .*[a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\))/\1|\2|\3|\4/ ' | awk ' BEGIN{ FS = "|" } /nombre /{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 } !/nombre /{ print $0 }' | mail -s " votes au ${DATE}" toto@toto.fret voila le résultat :
Bonjour,
Voici les stats au 16-05-2008 :
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )soit +nan% nombre de votes simples : 57537 ( contre 57537 au 1er April 2008 ) soit +nan%
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 )
nombre de votants double : 641 ( contre 598 en Avril 2008 )soit +nan% nombre de votants doubles : 7513 ( contre 7513 au 1er April 2008 ) soit +nan%
Nombre de com simple et double au 16-05-2008 :
nombre de com simples : 1246 ( contre 11652 en Avril 2008 )
nombre de com double : 6523 ( contre 5698 en Avril 2008 )
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 mai 2008 à 13:19
18 mai 2008 à 13:19
Affiches-nous la sortie de :
Voilà quand même le résultat que j'obtiens chez moi :
sed -e " s/\bSIMPL\b/${SIMPL}/ s/\bSIMOLD\b/${SIMOLD}/ s/\bDATOLD\b/${DATOLD}/ " votes.tpEntre balises < code > pour qu'on ait bien la mise en page...
Voilà quand même le résultat que j'obtiens chez moi :
[tmpfs]$ cat plop Bonjour, Voici les stats au 16-05-2008 : Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 ) Nombre de votants simple et double au 16-05-2008 : nombre de votants simples : 23546 ( contre 54652 en Avril 2008 ) nombre de votants double : 641 ( contre 598 en Avril 2008 ) Nombre de com simple et double au 16-05-2008 : nombre de com simples : 1246 ( contre 11652 en Avril 2008 ) nombre de com double : 6523 ( contre 5698 en Avril 2008 ) [tmpfs]$ sed -r ' s/(nombre .*[a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\))/\1|\2|\3|\4/ ' plop | awk ' BEGIN{ FS = "|" } /nombre /{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 } !/nombre /{ print $0 }' Bonjour, Voici les stats au 16-05-2008 : Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +7,67% ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 soit +14,48% ) Nombre de votants simple et double au 16-05-2008 : nombre de votants simples : 23546 ( contre 54652 en Avril 2008 soit -56,92% ) nombre de votants double : 641 ( contre 598 en Avril 2008 soit +7,19% ) Nombre de com simple et double au 16-05-2008 : nombre de com simples : 1246 ( contre 11652 en Avril 2008 soit -89,31% ) nombre de com double : 6523 ( contre 5698 en Avril 2008 soit +14,48% ) [tmpfs]$;-))
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
18 mai 2008 à 14:37
18 mai 2008 à 14:37
la sortie de :
et :
Bonjour,
Voici les votes au 18-05-2008
Votes :
il y a 19714 votes du site ( contre 19714 au 1er April 2008 )
New :
il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 )
CD :
il y a 158 cd ( contre 158 au 1er April 2008 )
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +7,67% )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 soit +14,48% )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 soit -56,92% )
nombre de votants double : 641 ( contre 598 en Avril 2008 soit +7,19% )
Bonne journée.
sed -e " s/\bDATE\b/${DATE}/ s/\bVOTE\b/${VOTE}/ s/\bPOLD\b/${POLD}/ s/\bNEW\b/${NEW}/ s/\bNOLD\b/${NOLD}/ s/\bCDC\b/${CDC}/ s/\bCCOLD\b/${CCOLD}/ s/\bVENTE\b/${VENTE}/ s/\bVEOLD\b/${VEOLD}/ s/\bLOC\b/${LOC}/ s/\bLOLD\b/${LOLD}/ s/\bCONFI\b/${CONFI}/ s/\bCONOLD\b/${CONOLD}/ s/\bSIMPL\b/${SIMPL}/ s/\bSIMOLD\b/${SIMOLD}/ s/\bDATOLD\b/${DATOLD}/ " votes.tpl
et :
Bonjour,
Voici les votes au 18-05-2008
Votes :
il y a 19714 votes du site ( contre 19714 au 1er April 2008 )
New :
il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 )
CD :
il y a 158 cd ( contre 158 au 1er April 2008 )
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +7,67% )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 soit +14,48% )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 soit -56,92% )
nombre de votants double : 641 ( contre 598 en Avril 2008 soit +7,19% )
Bonne journée.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
18 mai 2008 à 14:58
18 mai 2008 à 14:58
Et alors, où est le problème !? ;-\
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
18 mai 2008 à 16:04
18 mai 2008 à 16:04
Désole je me suis plante en faite voila la sortie sans le bout de code pour les pourcentages :
Résultat :
Bonjour,
Voici les votes au 18-05-2008
Votes :
il y a 19714 votes du site ( contre 19714 au 1er April 2008 )
New :
il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 )
CD :
il y a 158 cd ( contre 158 au 1er April 2008 )
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 )
nombre de votants double : 641 ( contre 598 en Avril 2008 )
Bonne journée.
et avec le bout de code pour les poucentages :
Résultat :
Bonjour,
Voici les votes au 18-05-2008
Votes :
il y a 19714 votes du site ( contre 19714 au 1er April 2008 )
New :
il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 )
CD :
il y a 158 cd ( contre 158 au 1er April 2008 )
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 ) soit +nan%
nombre de votes double : 6523 ( contre 5698 en Avril 2008 ) soit +nan%
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 ) soit +nan%
nombre de votants double : 641 ( contre 598 en Avril 2008 ) soit +nan%
Bonne journée.
voila
sed -e " s/\bDATE\b/${DATE}/ s/\bVOTE\b/${VOTE}/ s/\bPOLD\b/${POLD}/ s/\bNEW\b/${NEW}/ s/\bNOLD\b/${NOLD}/ s/\bCDC\b/${CDC}/ s/\bCCOLD\b/${CCOLD}/ s/\bVENTE\b/${VENTE}/ s/\bVEOLD\b/${VEOLD}/ s/\bLOC\b/${LOC}/ s/\bLOLD\b/${LOLD}/ s/\bCONFI\b/${CONFI}/ s/\bCONOLD\b/${CONOLD}/ s/\bSIMPL\b/${SIMPL}/ s/\bSIMOLD\b/${SIMOLD}/ s/\bDATOLD\b/${DATOLD}/ " votes.tpl
Résultat :
Bonjour,
Voici les votes au 18-05-2008
Votes :
il y a 19714 votes du site ( contre 19714 au 1er April 2008 )
New :
il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 )
CD :
il y a 158 cd ( contre 158 au 1er April 2008 )
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 )
nombre de votes double : 6523 ( contre 5698 en Avril 2008 )
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 )
nombre de votants double : 641 ( contre 598 en Avril 2008 )
Bonne journée.
et avec le bout de code pour les poucentages :
sed -e " s/\bDATE\b/${DATE}/ s/\bVOTE\b/${VOTE}/ s/\bPOLD\b/${POLD}/ s/\bNEW\b/${NEW}/ s/\bNOLD\b/${NOLD}/ s/\bCDC\b/${CDC}/ s/\bCCOLD\b/${CCOLD}/ s/\bVENTE\b/${VENTE}/ s/\bVEOLD\b/${VEOLD}/ s/\bLOC\b/${LOC}/ s/\bLOLD\b/${LOLD}/ s/\bCONFI\b/${CONFI}/ s/\bCONOLD\b/${CONOLD}/ s/\bSIMPL\b/${SIMPL}/ s/\bSIMOLD\b/${SIMOLD}/ s/\bDATOLD\b/${DATOLD}/ " votes.tpl | sed -r ' s/(nombre .*[a-z]+ : ([0-9]+) \( contre ([0-9]+) en [A-Z][a-z]+ [0-9]{4} )(\))/\1|\2|\3|\4/ ' | awk ' BEGIN{ FS = "|" } /nombre /{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 } !/nombre /{ print $0 }' | mail -s " votes au ${DATE}" toto@toto.fr
Résultat :
Bonjour,
Voici les votes au 18-05-2008
Votes :
il y a 19714 votes du site ( contre 19714 au 1er April 2008 )
New :
il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 )
CD :
il y a 158 cd ( contre 158 au 1er April 2008 )
Nombre de votes simple et double au 16-05-2008 :
nombre de votes simples : 12546 ( contre 11652 en Avril 2008 ) soit +nan%
nombre de votes double : 6523 ( contre 5698 en Avril 2008 ) soit +nan%
Nombre de votants simple et double au 16-05-2008 :
nombre de votants simples : 23546 ( contre 54652 en Avril 2008 ) soit +nan%
nombre de votants double : 641 ( contre 598 en Avril 2008 ) soit +nan%
Bonne journée.
voila
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 mai 2008 à 16:56
18 mai 2008 à 16:56
Tiens j'ai un peu remanié la syntaxe de "sed" et de "awk", et voilà ce que ça donne :
[tmpfs]$ cat pcsystemd Bonjour, Voici les votes au 18-05-2008 Votes : il y a 19714 votes du site ( contre 19714 au 1er April 2008 ) New : il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 ) CD : il y a 158 cd ( contre 158 au 1er April 2008 ) Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 ) Nombre de votants simple et double au 16-05-2008 : nombre de votants simples : 23546 ( contre 54652 en Avril 2008 ) nombre de votants double : 641 ( contre 598 en Avril 2008 ) Bonne journée. [tmpfs]$ sed -r ' /\(.*\)/ s/([^0-9]*)([0-9]+)([^0-9]*)([0-9]+)(.*)\)/\1\2\3\4\5|\2|\4|)/ ' pcsystemd | awk ' BEGIN{ FS = "|" } /il / || /nombre /{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 } !/il / && !/nombre /{ print $0 }' Bonjour, Voici les votes au 18-05-2008 Votes : il y a 19714 votes du site ( contre 19714 au 1er April 2008 soit +0,00% ) New : il y a 37498 inscriptions à la news du site ( contre 37495 au 1er April 2008 soit +0,01% ) CD : il y a 158 cd ( contre 158 au 1er April 2008 soit +0,00% ) Nombre de votes simple et double au 16-05-2008 : nombre de votes simples : 12546 ( contre 11652 en Avril 2008 soit +7,67% ) nombre de votes double : 6523 ( contre 5698 en Avril 2008 soit +14,48% ) Nombre de votants simple et double au 16-05-2008 : nombre de votants simples : 23546 ( contre 54652 en Avril 2008 soit -56,92% ) nombre de votants double : 641 ( contre 598 en Avril 2008 soit +7,19% ) Bonne journée. [tmpfs]$;-))
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
18 mai 2008 à 16:59
18 mai 2008 à 16:59
Merci énormement je vais étudié la synthase pour la comprendre en lisant de nouveau ton tuto sur SED puis je regarderais pour AWK puis je la testerais.
Merci encore
Merci encore
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 mai 2008 à 17:23
18 mai 2008 à 17:23
Explications syntaxe sed :
-r
Le switch pour signifier qu'on va utiliser les expression régulières étendues (pas besoin de les protéger)
/\(.*\)/
On cible uniquement les lignes comprenant des parenthèses
s/
Commande de substitution
([^0-9]*)
1ère sous-expression matchant tous les caractères jusqu'à ce qu'elle rencontre un caractère numérique
([0-9]+)
2ème sous-expression matchant uniquement une suite de caractères numériques
([^0-9]*)([0-9]+)
3ème et 4ème sous-expression identique aux 2 1ères
(.*)\)
5ème sous-expression matchant la fin de la ligne à l'exception de la parenthèse finale
/\1\2\3\4\5|\2|\4|)/
Substitution replaçant chaque sous-expression selon nos besoins
Explications syntaxe awk :
BEGIN{
FS = "|"
}
Définition du caractère délimiteur, le pipe (|)
/il / || /nombre /{
Si une ligne contient le motif "il " OU le motif "nombre "
printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4
}
La formater selon l'expression définie
!/il / && !/nombre /{
Si une ligne ne contient ni le motif "il " ET ni le motif "nombre "
print $0
}'
La retranscrire tel quel.
-r
Le switch pour signifier qu'on va utiliser les expression régulières étendues (pas besoin de les protéger)
/\(.*\)/
On cible uniquement les lignes comprenant des parenthèses
s/
Commande de substitution
([^0-9]*)
1ère sous-expression matchant tous les caractères jusqu'à ce qu'elle rencontre un caractère numérique
([0-9]+)
2ème sous-expression matchant uniquement une suite de caractères numériques
([^0-9]*)([0-9]+)
3ème et 4ème sous-expression identique aux 2 1ères
(.*)\)
5ème sous-expression matchant la fin de la ligne à l'exception de la parenthèse finale
/\1\2\3\4\5|\2|\4|)/
Substitution replaçant chaque sous-expression selon nos besoins
Explications syntaxe awk :
BEGIN{
FS = "|"
}
Définition du caractère délimiteur, le pipe (|)
/il / || /nombre /{
Si une ligne contient le motif "il " OU le motif "nombre "
printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4
}
La formater selon l'expression définie
!/il / && !/nombre /{
Si une ligne ne contient ni le motif "il " ET ni le motif "nombre "
print $0
}'
La retranscrire tel quel.
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
18 mai 2008 à 19:36
18 mai 2008 à 19:36
Merci jipicy,
effectivement les deux premieres lignes contiennent dans le texte des nombres du style :
Votes :
il y a 19714 inscriptions au site de pcsystemd 45 Espagne ( contre 19714 au 1er April 2008 soit +93776.19% )
New :
il y a 37523 inscriptions news au site de pcsystemd 12 Chine( contre 37515 au 1er April 2008 soit +178580.95% )
Je comprends mieux pourquoi un tel résultat pour ces deux lignes. Bon je vais essayé d'adapter le script .
Merci beaucoup
effectivement les deux premieres lignes contiennent dans le texte des nombres du style :
Votes :
il y a 19714 inscriptions au site de pcsystemd 45 Espagne ( contre 19714 au 1er April 2008 soit +93776.19% )
New :
il y a 37523 inscriptions news au site de pcsystemd 12 Chine( contre 37515 au 1er April 2008 soit +178580.95% )
Je comprends mieux pourquoi un tel résultat pour ces deux lignes. Bon je vais essayé d'adapter le script .
Merci beaucoup
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
18 mai 2008 à 20:51
18 mai 2008 à 20:51
Tiens avec cette petite correction ça devrait aller mieux :
sed -r ' /\(.*\)/ s/([^0-9]*)([0-9]+)(.*\([^0-9]*)([0-9]+)(.*)\)/\1\2\3\4\5|\2|\4|)/ ' pcsystemd | awk ' BEGIN{ FS = "|" } /il / || /nombre /{ printf "%s soit %+.2f%% %s\n",$1,($2-$3)/$3*100,$4 } !/il / && !/nombre /{ print $0 }';-))
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
18 mai 2008 à 21:03
18 mai 2008 à 21:03
Merci mille fois. Cette fois cela fonctionne parfaitement.
Bonne soirée.
Bonne soirée.