Script Shell et AWK
pcsystemd
Messages postés
734
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
voila j'ai cette portion de script Shell qui fonctionne très bien avec l'editeur SED (encore merci a la personne de ce forum qui m'a aidé il se reconnaitra). Je souhaiterais faire la meme chose mais avec AWK
if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ]
then
VENTE="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOC="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
echo 'nombre de votes simple et doubles au '${DATE} >> ${TMPDIR}/stat_${DATE}.lst
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e "s%|%%g;1 {s%.*%& (contre ${VENTE} en ${DATEOLD})%};2 {s%.*%& (contre ${LOC} en ${DATEOLD})%}" >> ${TMPDIR}/stat_${DATE}.lst
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_votes_old.lst
Avez vous une idée?
Merci
voila j'ai cette portion de script Shell qui fonctionne très bien avec l'editeur SED (encore merci a la personne de ce forum qui m'a aidé il se reconnaitra). Je souhaiterais faire la meme chose mais avec AWK
if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ]
then
VENTE="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOC="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
echo 'nombre de votes simple et doubles au '${DATE} >> ${TMPDIR}/stat_${DATE}.lst
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e "s%|%%g;1 {s%.*%& (contre ${VENTE} en ${DATEOLD})%};2 {s%.*%& (contre ${LOC} en ${DATEOLD})%}" >> ${TMPDIR}/stat_${DATE}.lst
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_votes_old.lst
Avez vous une idée?
Merci
A voir également:
- Script Shell et AWK
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Script cmd - Guide
11 réponses
Salut,
Il faudrait peut être expliqué ce que font les portions de codes avec "sed", tout le monde n'est pas à même de comprendre ces parties là, tu ne crois pas ?
Quelques explications seraient donc les bienvenues.
Pour les variables VENTE et LOC, ceci devrait faire l'affaire (en adaptant le numéro de ligne) :
Il faudrait peut être expliqué ce que font les portions de codes avec "sed", tout le monde n'est pas à même de comprendre ces parties là, tu ne crois pas ?
Quelques explications seraient donc les bienvenues.
Pour les variables VENTE et LOC, ceci devrait faire l'affaire (en adaptant le numéro de ligne) :
awk 'NR==1 {print $0}' fichier;-))
Comme l'a dit jipicy, quelques explications seraient les bienvenues. Tout le monde n'est pas bilingue sed/awk. Et pour resoudre un probleme, il faut d'abord l'enoncer clairement.
Poue répondre un peu à ton attente pour la seconde partie du "sed" :
[tmpfs]$ cat plop
nombre de vote simple : | 125455
nombre de vote double : | 25645
[tmpfs]$ var=115644
[tmpfs]$ awk -F"|" 'NR==1 {print $1,$2,"(contre '"$var"' en Avril)"}' plop
nombre de vote simple : 125455 (contre 115644 en Avril)
[tmpfs]$;-))
Bon prenons l'exemple que tu connais :
je créais un fichier toto.tpl qui sera mon template (ce sera le fichier que j'enverais par mail. il sera de forme suivante
Bonjour,
Voici les résultats du <DATE>
Nombre de votes simple = <RESULT> contre <RESULTOLD> du <DATEOLD>
Nombre de vote doubles = <RESULT> contre <RESULTOLD> du <DATEOLD>
etc..
puis un deuxieme fichier toto.sh contenant mon script avec SED
Voila je ne sais pas si j'ai été clair car je ne sais pas trop comment m'y prendre.
Merci
je créais un fichier toto.tpl qui sera mon template (ce sera le fichier que j'enverais par mail. il sera de forme suivante
Bonjour,
Voici les résultats du <DATE>
Nombre de votes simple = <RESULT> contre <RESULTOLD> du <DATEOLD>
Nombre de vote doubles = <RESULT> contre <RESULTOLD> du <DATEOLD>
etc..
puis un deuxieme fichier toto.sh contenant mon script avec SED
Voila je ne sais pas si j'ai été clair car je ne sais pas trop comment m'y prendre.
Merci
Désolé, effectivement je vais expliqué ce que fait le script :
VENTE="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOC="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
sont les variables qui permettent de recuperer dans le fichier ${TMPDIR}/nb_votes_old.lst le resultat de la ligne 1 et de la ligne 2 grace a SED
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e "s%|%%g;1 {s%.*%& (contre ${VENTE} en ${DATEOLD})%};2 {s%.*%& (contre ${LOC} en ${DATEOLD})%}" >> ${TMPDIR}/stat_${DATE}.lst
permet d'inserer dans le fichier stat le contenu du fichier nb_votes et d'inserer a la fin de la ligne 1 et 2 le contenu des variables VENTE et LOC toujours grace a SED via des expressions regulieres
VENTE="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOC="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
sont les variables qui permettent de recuperer dans le fichier ${TMPDIR}/nb_votes_old.lst le resultat de la ligne 1 et de la ligne 2 grace a SED
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e "s%|%%g;1 {s%.*%& (contre ${VENTE} en ${DATEOLD})%};2 {s%.*%& (contre ${LOC} en ${DATEOLD})%}" >> ${TMPDIR}/stat_${DATE}.lst
permet d'inserer dans le fichier stat le contenu du fichier nb_votes et d'inserer a la fin de la ligne 1 et 2 le contenu des variables VENTE et LOC toujours grace a SED via des expressions regulieres
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
En espérant avoir compris ta demande. A adapter bien sûr...
[tmpfs]$ cat toto.tpl
Bonjour,
Voici les résultats du <DATE>
Nombre de votes simple = <RESULT1> contre <VENTE> du <DATEOLD>
Nombre de vote doubles = <RESULT2> contre <LOC> du <DATEOLD>
etc..
[tmpfs]$ cat toto.sh
#! /bin/bash
DATE=$(date '+%A %d %B %Y')
DATEOLD=$(date -d '1 months ago' '+%A %d %B %Y')
# VENTE="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
VENTE=xxxxx
# LOC="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
LOC=yyyyy
RESULT1=XXXXX
RESULT2=YYYYY
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' toto.tpl > fichier_mail.txt
[tmpfs]$ ./toto.sh
[tmpfs]$ cat fichier_mail.txt
Bonjour,
Voici les résultats du mardi 13 mai 2008
Nombre de votes simple = XXXXX contre xxxxx du dimanche 13 avril 2008
Nombre de vote doubles = YYYYY contre yyyyy du dimanche 13 avril 2008
etc..
[tmpfs]$ ;-))
En fait j'ai mis en commentaire ta variable (avec sa syntaxe) car je n'avais pas de quoi la définir et du coup j'en ai créé une factice pour pouvoir faire mes tests et te montrer un exemple concret...
Désolé j'aurai du le préciser ;-(
Par contre j'avais bien marqué en début de message "A adapter..." ;-))
Désolé j'aurai du le préciser ;-(
Par contre j'avais bien marqué en début de message "A adapter..." ;-))
Dans la commande qui suit si je veux envoyer le fichier toto.tpl par mail est ce que je peux faire
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
'
cat toto.tpl | mail -s '' toto@toto.fr
MErci
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
'
cat toto.tpl | mail -s '' toto@toto.fr
MErci
Dans l'exemple que tu me donne
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' toto.tpl > fichier_mail.txt
tu traite le fichier toto.tpl que tu redirige vers fichier_mail.txt hors ce que je souhaiterais c'est envoyer le fichier toto.tpl par mail directement depuis mon script par exemple avec
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' cat toto.tpl | mail -s '' toto@toto.fr
Est ce que cela est possible ?
Voila une partie de mon script qu'en pense tu?
touch ${TMPDIR}/stat_${DATE}.lst
if [ -f "${TMPDIR}/nb_push_${DATE}.lst" ]
then
NBPUSH=`cat ${TMPDIR}/nb_push_${DATE}.lst`
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
mv -f ${TMPDIR}/nb_push_${DATE}.lst ${TMPDIR}/nb_push_old.lst
fi
if [ -f "${TMPDIR}/nb_newsletter_${DATE}.lst" ]
then
NBNEWSLETTER=`cat ${TMPDIR}/nb_newsletter_${DATE}.lst`
NBNEWSLETTEROLD=`cat ${TMPDIR}/nb_newsletter_old.lst`
mv -f ${TMPDIR}/nb_newsletter_${DATE}.lst ${TMPDIR}/nb_newsletter_old.lst
fi
if [ -f "${TMPDIR}/nb_cdc_${DATE}.lst" ]
then
NBCDC=`cat ${TMPDIR}/nb_cdc_${DATE}.lst`
NBCDCOLD=`cat ${TMPDIR}/nb_cdc_old.lst`
mv -f ${TMPDIR}/nb_cdc_${DATE}.lst ${TMPDIR}/nb_cdc_old.lst
fi
if [ -f "${TMPDIR}/nb_${DATE}.lst" ]
then
cat ${TMPDIR}/nb_${DATE}.lst | sed -e 's%|%%g;s%[^[:digit:]]%%g' >> ${TMPDIR}/stat_${DATE}.lst
CONFI="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
SIMPL="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
CONFIOLD="$(sed -n '1p' ${TMPDIR}/nb_old.lst)"
SIMPLOLD="$(sed -n '2p' ${TMPDIR}/nb_old.lst)"
cat ${TMPDIR}/nb_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_old.lst
fi
if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ]
then
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%|%%g;s%[^[:digit:]]%%g' >> ${TMPDIR}/stat_${DATE}.lst
VENTE="$(sed -n '3p' ${TMPDIR}/stat_${DATE}.lst)"
LOC="$(sed -n '4p' ${TMPDIR}/stat_${DATE}.lst)"
VENTEOLD="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOCOLD="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_votes_old.lst
fi
sed '
s/<DATE>/'"${DATE}"'/
s/<PUSH>/'"${PUSH}"'/
s/<PUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
'
cat toto.tpl | mail -s '' toto@toto.fr
Merci
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' toto.tpl > fichier_mail.txt
tu traite le fichier toto.tpl que tu redirige vers fichier_mail.txt hors ce que je souhaiterais c'est envoyer le fichier toto.tpl par mail directement depuis mon script par exemple avec
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' cat toto.tpl | mail -s '' toto@toto.fr
Est ce que cela est possible ?
Voila une partie de mon script qu'en pense tu?
touch ${TMPDIR}/stat_${DATE}.lst
if [ -f "${TMPDIR}/nb_push_${DATE}.lst" ]
then
NBPUSH=`cat ${TMPDIR}/nb_push_${DATE}.lst`
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
mv -f ${TMPDIR}/nb_push_${DATE}.lst ${TMPDIR}/nb_push_old.lst
fi
if [ -f "${TMPDIR}/nb_newsletter_${DATE}.lst" ]
then
NBNEWSLETTER=`cat ${TMPDIR}/nb_newsletter_${DATE}.lst`
NBNEWSLETTEROLD=`cat ${TMPDIR}/nb_newsletter_old.lst`
mv -f ${TMPDIR}/nb_newsletter_${DATE}.lst ${TMPDIR}/nb_newsletter_old.lst
fi
if [ -f "${TMPDIR}/nb_cdc_${DATE}.lst" ]
then
NBCDC=`cat ${TMPDIR}/nb_cdc_${DATE}.lst`
NBCDCOLD=`cat ${TMPDIR}/nb_cdc_old.lst`
mv -f ${TMPDIR}/nb_cdc_${DATE}.lst ${TMPDIR}/nb_cdc_old.lst
fi
if [ -f "${TMPDIR}/nb_${DATE}.lst" ]
then
cat ${TMPDIR}/nb_${DATE}.lst | sed -e 's%|%%g;s%[^[:digit:]]%%g' >> ${TMPDIR}/stat_${DATE}.lst
CONFI="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
SIMPL="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
CONFIOLD="$(sed -n '1p' ${TMPDIR}/nb_old.lst)"
SIMPLOLD="$(sed -n '2p' ${TMPDIR}/nb_old.lst)"
cat ${TMPDIR}/nb_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_old.lst
fi
if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ]
then
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%|%%g;s%[^[:digit:]]%%g' >> ${TMPDIR}/stat_${DATE}.lst
VENTE="$(sed -n '3p' ${TMPDIR}/stat_${DATE}.lst)"
LOC="$(sed -n '4p' ${TMPDIR}/stat_${DATE}.lst)"
VENTEOLD="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOCOLD="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_votes_old.lst
fi
sed '
s/<DATE>/'"${DATE}"'/
s/<PUSH>/'"${PUSH}"'/
s/<PUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
'
cat toto.tpl | mail -s '' toto@toto.fr
Merci
Pour rappel, le fichier "toto.tpl" est un TEMPLATE, donc il est sensé ne pas être modifié, d'où la redirection dans un fichier.
Mais tu peux très bien faire (et je viens de tester et ça marche très bien) :
Mais tu peux très bien faire (et je viens de tester et ça marche très bien) :
sed '
s/<DATE>/'"${DATE}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<RESULT1>/'"${RESULT1}"'/
s/<RESULT2>/'"${RESULT2}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' toto.tpl | mail -s "Envoi du ${DATE}" toto@toto.fr;-))
Pour reprendre ton script :
touch ${TMPDIR}/stat_${DATE}.lst
if [ -f "${TMPDIR}/nb_push_${DATE}.lst" ]
then
NBPUSH=`cat ${TMPDIR}/nb_push_${DATE}.lst`
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
mv -f ${TMPDIR}/nb_push_${DATE}.lst ${TMPDIR}/nb_push_old.lst
fi
if [ -f "${TMPDIR}/nb_newsletter_${DATE}.lst" ]
then
NBNEWSLETTER=`cat ${TMPDIR}/nb_newsletter_${DATE}.lst`
NBNEWSLETTEROLD=`cat ${TMPDIR}/nb_newsletter_old.lst`
mv -f ${TMPDIR}/nb_newsletter_${DATE}.lst ${TMPDIR}/nb_newsletter_old.lst
fi
if [ -f "${TMPDIR}/nb_cdc_${DATE}.lst" ]
then
NBCDC=`cat ${TMPDIR}/nb_cdc_${DATE}.lst`
NBCDCOLD=`cat ${TMPDIR}/nb_cdc_old.lst`
mv -f ${TMPDIR}/nb_cdc_${DATE}.lst ${TMPDIR}/nb_cdc_old.lst
fi
if [ -f "${TMPDIR}/nb_${DATE}.lst" ]
then
cat ${TMPDIR}/nb_${DATE}.lst | sed -e 's%|%%g;s%[^[:digit:]]%%g' >> ${TMPDIR}/stat_${DATE}.lst
CONFI="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
SIMPL="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
CONFIOLD="$(sed -n '1p' ${TMPDIR}/nb_old.lst)"
SIMPLOLD="$(sed -n '2p' ${TMPDIR}/nb_old.lst)"
cat ${TMPDIR}/nb_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_old.lst
fi
if [ -f "${TMPDIR}/nb_votes_${DATE}.lst" ]
then
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%|%%g;s%[^[:digit:]]%%g' >> ${TMPDIR}/stat_${DATE}.lst
VENTE="$(sed -n '3p' ${TMPDIR}/stat_${DATE}.lst)"
LOC="$(sed -n '4p' ${TMPDIR}/stat_${DATE}.lst)"
VENTEOLD="$(sed -n '1p' ${TMPDIR}/nb_votes_old.lst)"
LOCOLD="$(sed -n '2p' ${TMPDIR}/nb_votes_old.lst)"
cat ${TMPDIR}/nb_votes_${DATE}.lst | sed -e 's%[^[:digit:]]%%g' > ${TMPDIR}/nb_votes_old.lst
fi
sed '
s/<DATE>/'"${DATE}"'/
s/<PUSH>/'"${PUSH}"'/
s/<PUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' toto.tpl | mail -s "Envoi du ${DATE}" toto@toto.fr;-))
Bon voila j'ai testé mon script mais j'ai deux erreurs :
sed: -e expression #1, char 295: Extra characters after command
Null message body; hope that's ok
je reçois le mail mais vide apparement mon template n'est pas pris en compte serais ce qu'il n'est pas dans le meme repertoire pourtant j'ai adapte le chemin :
sed '
s/<DATE>/'"${DATE}"'/
s/<PUSH>/'"${PUSH}"'/
s/<PUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' ${TMPDIR}/stat.tpl | mail -s "stat au ${DATE}" toto@toto.fr
Merci
sed: -e expression #1, char 295: Extra characters after command
Null message body; hope that's ok
je reçois le mail mais vide apparement mon template n'est pas pris en compte serais ce qu'il n'est pas dans le meme repertoire pourtant j'ai adapte le chemin :
sed '
s/<DATE>/'"${DATE}"'/
s/<PUSH>/'"${PUSH}"'/
s/<PUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' ${TMPDIR}/stat.tpl | mail -s "stat au ${DATE}" toto@toto.fr
Merci
Bon alors, déjà est-ce que tes variables sont susceptibles de contenir des caractères comme un "/" (slash) ?
Compte les caractères à partir de la 1ère quote de "sed" pour déterminer où se situe l'erreur...
Ensuite, rajoute "set -xv" en début de script (après le shebang (#! /bin/bash)) pour voir si toutes tes variables sont bien interprétées...
Avant d'essayer d'envoyer le mail, assures-toi que ton script marche. Retire le "| mail -s "stat au ${DATE}" toto@toto.fr " en fin de script et vois si tu as bien le résultat escompté sur la sortie standard (l'écran) !!!
Exécute chaque partie de ton script une par une, puis ajoute-les une par une aussi qu'une fois la précédente validée...
Compte les caractères à partir de la 1ère quote de "sed" pour déterminer où se situe l'erreur...
Ensuite, rajoute "set -xv" en début de script (après le shebang (#! /bin/bash)) pour voir si toutes tes variables sont bien interprétées...
Avant d'essayer d'envoyer le mail, assures-toi que ton script marche. Retire le "| mail -s "stat au ${DATE}" toto@toto.fr " en fin de script et vois si tu as bien le résultat escompté sur la sortie standard (l'écran) !!!
Exécute chaque partie de ton script une par une, puis ajoute-les une par une aussi qu'une fois la précédente validée...
Il m'est très difficile de deviner où se situe l'erreur comme ça ;-\
Que contient ton fichier TEMPLATE "stat_century.tpl" exactement ?
Que contient ton fichier TEMPLATE "stat_century.tpl" exactement ?
Bonjour,
Voici ce que contient mon template :
Voici les stats au <DATE>
Push :
il y a <PUSH> inscriptions au push (contre <NBPUSHOLD> en <DATEOLD>)
Newsletter :
il y a <NEWSLETTER> inscriptions à la newsletter (contre <NEWSLETTEROLD> en <DATEOLD>)
Coups :
il y a <NBCDC> coups programmés (contre <NBCDCOLD> en <DATEOLD>)
Nombre de votes simple et double au <DATE> :
nombre de votes simples : <CONFI> (contre <CONFIOLD> en <DATEOLD>)
nombre de votes doubles : <SIMPL> (contre <SIMPLOLD> en <DATEOLD>)
Nombre de votants au <DATE> :
nombre de votants simples : <VENTE> (contre <VENTEOLD> en <DATEOLD>)
nombre de votant doubles : <LOC> (contre <LOCOLD> en <DATEOLD>)
Bonne journée.
Juste une remarque j'ai comme l'impression au vu de l'erreur :
sed: -e expression #1, char 298: Unknown option to 's'
qu'il y a un souci avec le s/ de sed mais bon ce n'est qu'une remarque je ne suis pas encore assez calé pour en etre sur.
Merci
Voici ce que contient mon template :
Voici les stats au <DATE>
Push :
il y a <PUSH> inscriptions au push (contre <NBPUSHOLD> en <DATEOLD>)
Newsletter :
il y a <NEWSLETTER> inscriptions à la newsletter (contre <NEWSLETTEROLD> en <DATEOLD>)
Coups :
il y a <NBCDC> coups programmés (contre <NBCDCOLD> en <DATEOLD>)
Nombre de votes simple et double au <DATE> :
nombre de votes simples : <CONFI> (contre <CONFIOLD> en <DATEOLD>)
nombre de votes doubles : <SIMPL> (contre <SIMPLOLD> en <DATEOLD>)
Nombre de votants au <DATE> :
nombre de votants simples : <VENTE> (contre <VENTEOLD> en <DATEOLD>)
nombre de votant doubles : <LOC> (contre <LOCOLD> en <DATEOLD>)
Bonne journée.
Juste une remarque j'ai comme l'impression au vu de l'erreur :
sed: -e expression #1, char 298: Unknown option to 's'
qu'il y a un souci avec le s/ de sed mais bon ce n'est qu'une remarque je ne suis pas encore assez calé pour en etre sur.
Merci
il y a un souci avec le s/ de sed
D'où ma demande sur le contenu des variables, dont je ne sais toujours pas ce qu'elles contiennent ;-((
Le "set -xv" m'intéressait que pour voir l'interprétation des variables, là apparemment, le script est interrompu par l'erreur sur "sed", avant même une quelconque interprétation de quoi que ce soit ;-(((
Donc, affiche moi le contenu de chaque variable, sans quoi je ne suis d'aucune utilité.
Dans le TEMPLATE, on peut aussi virer les chevrons (< et >) qui ne servent à rien vu que chaque partie à remplacer est un mot en majuscule...
Il se peut aussi que ce soit ça qui gène dans "sed" vu que c'est un caractère utilisé pour les regex.
D'où ma demande sur le contenu des variables, dont je ne sais toujours pas ce qu'elles contiennent ;-((
Le "set -xv" m'intéressait que pour voir l'interprétation des variables, là apparemment, le script est interrompu par l'erreur sur "sed", avant même une quelconque interprétation de quoi que ce soit ;-(((
Donc, affiche moi le contenu de chaque variable, sans quoi je ne suis d'aucune utilité.
Dans le TEMPLATE, on peut aussi virer les chevrons (< et >) qui ne servent à rien vu que chaque partie à remplacer est un mot en majuscule...
Il se peut aussi que ce soit ça qui gène dans "sed" vu que c'est un caractère utilisé pour les regex.
Voila ce que contienne mes variables
NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
NBNEWSLETTER="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
NBNEWSLETTEROLD=`cat ${TMPDIR}/newsletter_old.lst`
NBCDC="$(sed -n '3p' ${TMPDIR}/stat_${DATE}.lst)"
NBCDCOLD=`cat ${TMPDIR}/nb_old.lst`
CONFI="$(sed -n '4p' ${TMPDIR}/stat_${DATE}.lst)"
SIMPL="$(sed -n '5p' ${TMPDIR}/stat_${DATE}.lst)"
CONFIOLD="$(sed -n '1p' ${TMPDIR}/nb_m_old.lst)"
SIMPLOLD="$(sed -n '2p' ${TMPDIR}/nb_m_old.lst)"
VENTE="$(sed -n '6p' ${TMPDIR}/stat_${DATE}.lst)"
LOC="$(sed -n '7p' ${TMPDIR}/stat_${DATE}.lst)"
VENTEOLD="$(sed -n '1p' ${TMPDIR}/nbe_old.lst)"
LOCOLD="$(sed -n '2p' ${TMPDIR}/nbe_old.lst)"
j'ai enlevé les <> dans mon TEMPLATE puis executé hors du script la commande sed suivante :
$sed '
s/<DATE>/'"${DATE}"'/
s/<NBPUSH>/'"${PUSH}"'/
s/<NBPUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' stats.tpl > fichier.txt
il me creait bien le fichier fichier.txt mais aucunes variables n'est interpreté . Voici le contenu de fichier.txt
Bonjour,
Voici les stats au
Push :
il y a NBPUSH inscriptions au push (contre NBPUSHOLD en DATEOLD)
Newsletter :
il y a NBNEWSLETTER inscriptions à la newsletter (contre NBNEWSLETTEROLD en DATEOLD)
Coups :
il y a NBCDC coups programmés (contre NBCDCOLD en DATEOLD)
Nombre de votes simple et double au DATE :
nombre de votes simple : CONFI (contre CONFIOLD en DATEOLD)
nombre de votes double : SIMPL (contre SIMPLOLD en DATEOLD)
Nombre de votants simple et double au DATE :
nombre de votants simples : VENTE (contre VENTEOLD en DATEOLD)
nombre de votants doubles : LOC (contre LOCOLD en DATEOLD)
Bonne journée.
Merci
NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
NBNEWSLETTER="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
NBNEWSLETTEROLD=`cat ${TMPDIR}/newsletter_old.lst`
NBCDC="$(sed -n '3p' ${TMPDIR}/stat_${DATE}.lst)"
NBCDCOLD=`cat ${TMPDIR}/nb_old.lst`
CONFI="$(sed -n '4p' ${TMPDIR}/stat_${DATE}.lst)"
SIMPL="$(sed -n '5p' ${TMPDIR}/stat_${DATE}.lst)"
CONFIOLD="$(sed -n '1p' ${TMPDIR}/nb_m_old.lst)"
SIMPLOLD="$(sed -n '2p' ${TMPDIR}/nb_m_old.lst)"
VENTE="$(sed -n '6p' ${TMPDIR}/stat_${DATE}.lst)"
LOC="$(sed -n '7p' ${TMPDIR}/stat_${DATE}.lst)"
VENTEOLD="$(sed -n '1p' ${TMPDIR}/nbe_old.lst)"
LOCOLD="$(sed -n '2p' ${TMPDIR}/nbe_old.lst)"
j'ai enlevé les <> dans mon TEMPLATE puis executé hors du script la commande sed suivante :
$sed '
s/<DATE>/'"${DATE}"'/
s/<NBPUSH>/'"${PUSH}"'/
s/<NBPUSHOLD>/'"${PUSHOLD}"'/
s/<NBNEWSLETTER>/'"${NBNEWSLETTER}"'/
s/<NBNEWSLETTEROLD>/'"${NBNEWSLETTEROLD}"'/
s/<NBCDC>/'"${NBCDC}"'/
s/<NBCDCOLD>/'"${NBCDCOLD}"'/
s/<VENTE>/'"${VENTE}"'/
s/<LOC>/'"${LOC}"'/
s/<VENTEOLD>/'"${VENTEOLD}"'/
s/<LOCOLD>/'"${LOCOLD}"'/
s/<CONFI>/'"${CONFI}"'/
s/<SIMPL>/'"${SIMPL}"'/
s/<CONFIOLD>/'"${CONFIOLD}"'/
s/<SIMPLOLD>/'"${SIMPLOLD}"'/
s/<DATEOLD>/'"${DATEOLD}"'/
' stats.tpl > fichier.txt
il me creait bien le fichier fichier.txt mais aucunes variables n'est interpreté . Voici le contenu de fichier.txt
Bonjour,
Voici les stats au
Push :
il y a NBPUSH inscriptions au push (contre NBPUSHOLD en DATEOLD)
Newsletter :
il y a NBNEWSLETTER inscriptions à la newsletter (contre NBNEWSLETTEROLD en DATEOLD)
Coups :
il y a NBCDC coups programmés (contre NBCDCOLD en DATEOLD)
Nombre de votes simple et double au DATE :
nombre de votes simple : CONFI (contre CONFIOLD en DATEOLD)
nombre de votes double : SIMPL (contre SIMPLOLD en DATEOLD)
Nombre de votants simple et double au DATE :
nombre de votants simples : VENTE (contre VENTEOLD en DATEOLD)
nombre de votants doubles : LOC (contre LOCOLD en DATEOLD)
Bonne journée.
Merci
Ce que j'ai besoin c'est de la valeur de chaque variable une fois interprétée...
NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
Ok, mais moi je voudrais le résultat de :
echo "$NBPUSH"
etc.
etc.
...
Mets-moi aussi en plus des variables citées au-dessus la valeur de "${DATE}" et "${DATEOLD}"
NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
Ok, mais moi je voudrais le résultat de :
echo "$NBPUSH"
etc.
etc.
...
Mets-moi aussi en plus des variables citées au-dessus la valeur de "${DATE}" et "${DATEOLD}"
ok voici ce que tu demandes :
$ DATEOLD=`date -d '-1 month ago' '+%B %Y'`
DATEOLD=`date -d '-1 month ago' '+%B %Y'`
date -d '-1 month ago' '+%B %Y'
++ date -d '-1 month ago' '+%B %Y'
+ DATEOLD=June 2008
$ echo $DATEOLD
echo $DATEOLD
+ echo June 2008
June 2008
$ DATE=`date '+%d-%m-%Y'`
DATE=`date '+%d-%m-%Y'`
date '+%d-%m-%Y'
++ date +%d-%m-%Y
+ DATE=14-05-2008
$ echo $DATE
echo $DATE
+ echo 14-05-2008
14-05-2008
$ NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
sed -n '1p' ${TMPDIR}/stat_${DATE}.lst
++ sed -n 1p /tmp/stat_14-05-2008.lst
+ NBPUSH=123
$ echo $NBPUSH
+ echo 123
123
$ NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
cat ${TMPDIR}/nb_push_old.lst
++ cat /tmp/nb_push_old.lst
+ NBPUSHOLD=19687
$ echo $NBPUSHOLD
echo $NBPUSHOLD
+ echo 19687
19687
$ NBNEWSLETTER="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
NBNEWSLETTER="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
sed -n '2p' ${TMPDIR}/stat_${DATE}.lst
++ sed -n 2p /tmp/stat_14-05-2008.lst
+ NBNEWSLETTER=1234
$ echo $NBNEWSLETTER echo $NBNEWSLETTER
+ echo 1234
1234
$ NBNEWSLETTEROLD=`cat ${TMPDIR}/newsletter_old.lst`
NBNEWSLETTEROLD=`cat ${TMPDIR}/newsletter_old.lst`
cat ${TMPDIR}/newsletter_old.lst
++ cat /tmp/newsletter_old.lst
+ NBNEWSLETTEROLD=36963
$ echo $NBNEWSLETTEROLD
+ echo 36963
36963
etc.. voila pas de problème particulier
Merci
$ DATEOLD=`date -d '-1 month ago' '+%B %Y'`
DATEOLD=`date -d '-1 month ago' '+%B %Y'`
date -d '-1 month ago' '+%B %Y'
++ date -d '-1 month ago' '+%B %Y'
+ DATEOLD=June 2008
$ echo $DATEOLD
echo $DATEOLD
+ echo June 2008
June 2008
$ DATE=`date '+%d-%m-%Y'`
DATE=`date '+%d-%m-%Y'`
date '+%d-%m-%Y'
++ date +%d-%m-%Y
+ DATE=14-05-2008
$ echo $DATE
echo $DATE
+ echo 14-05-2008
14-05-2008
$ NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
NBPUSH="$(sed -n '1p' ${TMPDIR}/stat_${DATE}.lst)"
sed -n '1p' ${TMPDIR}/stat_${DATE}.lst
++ sed -n 1p /tmp/stat_14-05-2008.lst
+ NBPUSH=123
$ echo $NBPUSH
+ echo 123
123
$ NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
NBPUSHOLD=`cat ${TMPDIR}/nb_push_old.lst`
cat ${TMPDIR}/nb_push_old.lst
++ cat /tmp/nb_push_old.lst
+ NBPUSHOLD=19687
$ echo $NBPUSHOLD
echo $NBPUSHOLD
+ echo 19687
19687
$ NBNEWSLETTER="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
NBNEWSLETTER="$(sed -n '2p' ${TMPDIR}/stat_${DATE}.lst)"
sed -n '2p' ${TMPDIR}/stat_${DATE}.lst
++ sed -n 2p /tmp/stat_14-05-2008.lst
+ NBNEWSLETTER=1234
$ echo $NBNEWSLETTER echo $NBNEWSLETTER
+ echo 1234
1234
$ NBNEWSLETTEROLD=`cat ${TMPDIR}/newsletter_old.lst`
NBNEWSLETTEROLD=`cat ${TMPDIR}/newsletter_old.lst`
cat ${TMPDIR}/newsletter_old.lst
++ cat /tmp/newsletter_old.lst
+ NBNEWSLETTEROLD=36963
$ echo $NBNEWSLETTEROLD
+ echo 36963
36963
etc.. voila pas de problème particulier
Merci
Pffff, je cale là :-(((
Bon essaie de virer tous les chevrons (< et >) autant du fichier TEMPLATE que dans le script, on verra bien...
Bon essaie de virer tous les chevrons (< et >) autant du fichier TEMPLATE que dans le script, on verra bien...
Bon voila j'ai trouvé la solution donc je l'indique ça peut toujours servir a d'autres personnes :
Quand on souhaite remplacer des champs dans un fichier TEMPLATE :
sed -e "
s/\bDATE\b/${DATE}/
s/\bNBPUSH\b/${NBPUSH}/
s/\bPOLD\b/${POLD}/
s/\bNEWSLETTER\b/${NEWSLETTER}/
s/\bNOLD\b/${NOLD}/
s/\bCDC\b/${CDC}/
s/\bCCOLD\b/${CCOLD}/
" stats_century21.tpl | mail -s " ...
Le nom des variables ne doivent pas etre trop similaire, Il faut mettre des doubles cotes et apparement un marqueur s/\b et \b/ .
Pour plus de detail je vous ai mis la réponse a mon post sur le Group des users de SED : https://groups.yahoo.com/neo/groups/sed-users/info
Merci a tous ceux qui m'ont aidé et surtout a toi jipicy.
Further, as a favor to you I will point out that the order of the
lines in a sed script is very important. In particular
NBPUSH
NBPUSHOLD
and similar constructions will cause problems, because "NBPUSHOLD"
contains "NBPUSH" as a substring. When the sed reads a line into the
pattern space which contains "NBPUSHOLD", the sed script will match
"NBPUSH" on that pattern because it truly does match.
If you intend to search for whole words, you must reverse the order
of the patterns to find, so that the longer string comes first:
s/NBPUSHOLD/$etc/
s/NBPUSH/$etc/
s/VENTEOLD/$etc/
s/VENTE/$etc
Or an alternative is to use GNU sed (comes by default with every
GNU/Linux installation) and use the word-boundary marker, \b. E.g.,
s/\bNBPUSH\b/$one/
s/\bNBPUSHOLD\b/$two/
s/\bVENTE\b/$three/
s/\bVENTEOLD\b/$four/
Quand on souhaite remplacer des champs dans un fichier TEMPLATE :
sed -e "
s/\bDATE\b/${DATE}/
s/\bNBPUSH\b/${NBPUSH}/
s/\bPOLD\b/${POLD}/
s/\bNEWSLETTER\b/${NEWSLETTER}/
s/\bNOLD\b/${NOLD}/
s/\bCDC\b/${CDC}/
s/\bCCOLD\b/${CCOLD}/
" stats_century21.tpl | mail -s " ...
Le nom des variables ne doivent pas etre trop similaire, Il faut mettre des doubles cotes et apparement un marqueur s/\b et \b/ .
Pour plus de detail je vous ai mis la réponse a mon post sur le Group des users de SED : https://groups.yahoo.com/neo/groups/sed-users/info
Merci a tous ceux qui m'ont aidé et surtout a toi jipicy.
Further, as a favor to you I will point out that the order of the
lines in a sed script is very important. In particular
NBPUSH
NBPUSHOLD
and similar constructions will cause problems, because "NBPUSHOLD"
contains "NBPUSH" as a substring. When the sed reads a line into the
pattern space which contains "NBPUSHOLD", the sed script will match
"NBPUSH" on that pattern because it truly does match.
If you intend to search for whole words, you must reverse the order
of the patterns to find, so that the longer string comes first:
s/NBPUSHOLD/$etc/
s/NBPUSH/$etc/
s/VENTEOLD/$etc/
s/VENTE/$etc
Or an alternative is to use GNU sed (comes by default with every
GNU/Linux installation) and use the word-boundary marker, \b. E.g.,
s/\bNBPUSH\b/$one/
s/\bNBPUSHOLD\b/$two/
s/\bVENTE\b/$three/
s/\bVENTEOLD\b/$four/