C'est tout b=C3=AAte mais je ne vois pas comment je peux faire un controle =
sur
une ligne.
J'ai un fichier, dans lequel je g=C3=A9n=C3=A9re une ligne d'=C3=A9x=C3=A9c=
ution (un resultat
d'un bash), si j'en ai plusieurs
c'est que j'ai un probl=C3=A8me dans l'=C3=A9x=C3=A9cution de mon script.
Comment puis-je faire pour controler si j'ai strictement et seulement une
seule ligne dans ce fichier,
mais si j'en ai plusieurs =C3=A7a ne va pas ?
echo "c'est bon"
echo "c'est pas bon"
Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas =C3=
=A7a
dont j'ai besoin
<div dir=3D"ltr">Bonjour =C3=A0 tous,<div><br></div><div>C'est tout b=
=C3=AAte mais je ne vois pas comment je peux faire un controle sur une lign=
e.</div><div><br></div><div>J'ai un fichier, dans lequel je g=C3=A9n=C3=
=A9re une ligne d'=C3=A9x=C3=A9cution (un resultat d'un bash), si j=
'en ai plusieurs</div><div>c'est que j'ai un probl=C3=A8me dans=
l'=C3=A9x=C3=A9cution de mon script.</div><div><br></div><div>Comment =
puis-je faire pour controler si j'ai strictement et seulement une seule=
ligne dans ce fichier,</div><div>mais si j'en ai plusieurs =C3=A7a ne =
va pas ?</div><div><br></div><div>echo "c'est bon"</div><div>=
<br></div><div><br></div><div>echo "c'est pas bon"</div><div>=
<br></div><div>Je pourrais faire un controle si il est vide ou pas, mais ce=
n'est pas =C3=A7a dont j'ai besoin</div><div><br></div><div>Si vou=
s avez une id=C3=A9e ?</div><div><br></div><div><div><br></div>-- <br><div =
class=3D"gmail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"lt=
r">david martin<div><br></div></div></div>
</div></div>
[...] Je me demande bien comment faire ça, je peux rajouter dans le script en crontab, de générer un fichier qui contiendrait la date du jour + heure et minute du genre /tmp/time 20170905 (pour 9h05) mais comment et avec quoi faire la comparaison pour savoir qu'à la prochaine génération du fichier /tmp/time c'est bon ou pas.
Utilise incron qui est un cron like permettant de gérer les événements concernant la gestion d'un système de fichier. -- Daniel
Le 02/06/2017 à 09:10, David Martin a écrit :
[...]
Je me demande bien comment faire ça, je peux rajouter dans le script
en crontab, de générer un fichier
qui contiendrait la date du jour + heure et minute du genre
/tmp/time
20170905 (pour 9h05)
mais comment et avec quoi faire la comparaison pour savoir qu'à la
prochaine génération du fichier /tmp/time c'est bon ou pas.
Utilise incron qui est un cron like permettant de gérer les événements
concernant la gestion d'un système de fichier.
[...] Je me demande bien comment faire ça, je peux rajouter dans le script en crontab, de générer un fichier qui contiendrait la date du jour + heure et minute du genre /tmp/time 20170905 (pour 9h05) mais comment et avec quoi faire la comparaison pour savoir qu'à la prochaine génération du fichier /tmp/time c'est bon ou pas.
Utilise incron qui est un cron like permettant de gérer les événements concernant la gestion d'un système de fichier. -- Daniel
David - DCPC
--f403045c2cf2af14c70550f50cfd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Bonjour, Si tu as un mot ou phrase clé unique dans ta ligne ET dans ton fichier , pourquoi ne pas faire un simple grep -c <mot_clé> ? ça te diras combien de fois ta chaîne existe dans le fichier, et si c'est unique, du coup tu as l'occurrence de ta ligne. David Le 2 juin 2017 à 08:50, David Martin a é crit :
Lorenzo, merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier. Je vais essayer de le rajouter le n pour voir -- david martin
-- Salutations, David CHALON --f403045c2cf2af14c70550f50cfd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir="ltr"><div><div><div>Bonjour, <br><br></div>Si tu as un mot ou p hrase clé unique dans ta ligne ET dans ton fichier, pourquoi ne pas fa ire un simple grep -c <mot_clé> ?<br><br></div>ça te diras combien de fois ta chaîne existe dans le fichier, et si c'est uniq ue, du coup tu as l'occurrence de ta ligne.<br><br></div>David<br></div ><div class="gmail_extra"><br><div class="gmail_quote">Le 2 juin 2017 à 08:50, David Martin <span dir="ltr"><<a href="mailto:damart.v " target="_blank"></a>></span> a écrit :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8e x;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class ="gmail_extra"><div class="gmail_quote">Lorenzo,</div><div class="gma il_quote"><br></div><div class="gmail_quote">merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier.</div><d iv class="gmail_quote"><br></div><div class="gmail_quote">Je vais essay er de le rajouter le n pour voir</div><span class="HOEnZb"><font color ="#888888"><div class="gmail_quote"><br></div>-- <br><div class="m_-5 616720714088550569gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">david martin<div><br></div></div></div> </font></span></div></div> </div><br><br clear="all"><br>-- <br><div class="gmail_sig nature" data-smartmail="gmail_signature">Salutations,<br>David CHALON</di v> </div> --f403045c2cf2af14c70550f50cfd--
<div dir="ltr"><div><div><div>Bonjour, <br><br></div>Si tu as un mot ou p hrase clé unique dans ta ligne ET dans ton fichier, pourquoi ne pas fa ire un simple grep -c <mot_clé> ?<br><br></div>ça te diras combien de fois ta chaîne existe dans le fichier, et si c'est uniq ue, du coup tu as l'occurrence de ta ligne.<br><br></div>David<br></div ><div class="gmail_extra"><br><div class="gmail_quote">Le 2 juin 2017 à 08:50, David Martin <span dir="ltr"><<a href="mailto:damart.v idin@gmail.com" target="_blank">damart.vidin@gmail.com</a>></span> a écrit :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8e x;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class ="gmail_extra"><div class="gmail_quote">Lorenzo,</div><div class="gma il_quote"><br></div><div class="gmail_quote">merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier.</div><d iv class="gmail_quote"><br></div><div class="gmail_quote">Je vais essay er de le rajouter le n pour voir</div><span class="HOEnZb"><font color ="#888888"><div class="gmail_quote"><br></div>-- <br><div class="m_-5 616720714088550569gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">david martin<div><br></div></div></div>
</font></span></div></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_sig nature" data-smartmail="gmail_signature">Salutations,<br>David CHALON</di v>
</div>
--f403045c2cf2af14c70550f50cfd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Bonjour, Si tu as un mot ou phrase clé unique dans ta ligne ET dans ton fichier , pourquoi ne pas faire un simple grep -c <mot_clé> ? ça te diras combien de fois ta chaîne existe dans le fichier, et si c'est unique, du coup tu as l'occurrence de ta ligne. David Le 2 juin 2017 à 08:50, David Martin a é crit :
Lorenzo, merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier. Je vais essayer de le rajouter le n pour voir -- david martin
-- Salutations, David CHALON --f403045c2cf2af14c70550f50cfd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir="ltr"><div><div><div>Bonjour, <br><br></div>Si tu as un mot ou p hrase clé unique dans ta ligne ET dans ton fichier, pourquoi ne pas fa ire un simple grep -c <mot_clé> ?<br><br></div>ça te diras combien de fois ta chaîne existe dans le fichier, et si c'est uniq ue, du coup tu as l'occurrence de ta ligne.<br><br></div>David<br></div ><div class="gmail_extra"><br><div class="gmail_quote">Le 2 juin 2017 à 08:50, David Martin <span dir="ltr"><<a href="mailto:damart.v " target="_blank"></a>></span> a écrit :<br><blockquote class="gmail_quote" style="margin:0 0 0 .8e x;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class ="gmail_extra"><div class="gmail_quote">Lorenzo,</div><div class="gma il_quote"><br></div><div class="gmail_quote">merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier.</div><d iv class="gmail_quote"><br></div><div class="gmail_quote">Je vais essay er de le rajouter le n pour voir</div><span class="HOEnZb"><font color ="#888888"><div class="gmail_quote"><br></div>-- <br><div class="m_-5 616720714088550569gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">david martin<div><br></div></div></div> </font></span></div></div> </div><br><br clear="all"><br>-- <br><div class="gmail_sig nature" data-smartmail="gmail_signature">Salutations,<br>David CHALON</di v> </div> --f403045c2cf2af14c70550f50cfd--
Lorenzo Bernardi
On 06/02/2017 09:10 AM, David Martin wrote:
Tu avais raison, avec le n ça fonctionne j'ai bien le compteur à 1
on peut utiliser l'astuce donnée par David Chalon faire un grep [ "$(grep utilisateur BatchMajInfoUtilisateurEmargos20170602090001.log | wc -l)" == "1" ] && echo 'ok' || echo 'KO' devrait marcher.
Je vais remonter cette annomalie pour qu'il rajoute le n dans le fichier généré, en attendant on me demande de faire une moulinette qui vérifie que le script qui génère ce fichier soit bien exécuter toutes les 15 mintues. voici son vrai nom : voici : BatchMajInfoUtilisateurEmargos20170602090001.log C'est ce fameux fichier qui doit contenir le n Je me demande bien comment faire ça, je peux rajouter dans le script en crontab, de générer un fichier qui contiendrait la date du jour + heure et minute du genre
je ne comprends pas trop le problème. Je veux dire tu veux savoir si le fichier a été crée il y a moins de 15 minutes. En unix on ne connait pas la date de création d'un fichier mais en fait dans ton cas cela ne doit pas être un problème car j'imagine que la moulinette réécrit le meme fichier à chaque fois. donc la commande stat doit pouvoir etre utiliser par exemple stat toto.txt renvoie File: toto.txt Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fe01h/65025d Inode: 537127084 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1001/ AAAA) Gid: ( 1001/ AAAA) Access: 2017-06-02 11:21:00.848700391 +0200 Modify: 2017-06-02 11:21:00.848700391 +0200 Change: 2017-06-02 11:21:00.848700391 +0200 Birth: - donc les date d'Acces de modification et de changement sont les meme. C'est la date de creation. Comme tu modifie pas le fichier à priori on doit pouvoir utiliser la date de modify. On peut donc utiliser le script suivant. # on recupere la valeur de modify et on extrait la date que l'on converti en timestamp (durée en seconde depuis 1970) stattime=$(date -d "$(stat toto.txt | grep Modify | cut -c8-27)" +%s) # on fait la différence entre la date courante et la date de modification de fichier. diff=$(( $(date +%s) - $stattime )) # on calcule si cette difference est superieur a 15*60 secondes [ $diff -gt 600 ] && echo "more than 600" || echo "less than 600" Tu mets ces lignes et tu lance un cron toute les x minutes qui verfie que tout est bon et si cela dépasse 15 minutes (le truc more than 600) tu fais quelque chose (envoi d'un courriel ou autre). Bien sur il faut tester le truc et faire attention au fait que je teste le fichier toto.txt et pas ton fichier. Le | grep Modify récupére la chaine de caractères Modify de la commande stat et le cut -c8-27 récupére la chaine de caractères entre la 8 et la 27 eme position de la chaine initiale. Il faut bien regarder si cela colle avec la sortie de stat sur ta machine. Le timestamp est utile car comme cela on ne fait qu'une soustraction en seconde. Je suis pas très bon en bash et il faut peut être rajouter des tests pour être sur que le fichier existe ou autre subtilités. Desolé si j'ai pas bien compris le problème L.
On 06/02/2017 09:10 AM, David Martin wrote:
Tu avais raison, avec le n ça fonctionne j'ai bien le compteur à 1
on peut utiliser l'astuce donnée par David Chalon faire un grep
Je vais remonter cette annomalie pour qu'il rajoute le n dans le
fichier généré,
en attendant on me demande de faire une moulinette qui vérifie que le
script qui génère ce fichier
soit bien exécuter toutes les 15 mintues. voici son vrai nom :
Je me demande bien comment faire ça, je peux rajouter dans le script
en crontab, de générer un fichier
qui contiendrait la date du jour + heure et minute du genre
je ne comprends pas trop le problème. Je veux dire tu veux savoir si le
fichier a été crée il y a moins de 15 minutes. En unix on ne connait pas
la date de création d'un fichier mais en fait dans ton cas cela ne doit
pas être un problème car j'imagine que la moulinette réécrit le meme
fichier à chaque fois.
donc les date d'Acces de modification et de changement sont les meme.
C'est la date de creation. Comme tu modifie pas le fichier à priori on
doit pouvoir utiliser la date de modify.
On peut donc utiliser le script suivant.
# on recupere la valeur de modify et on extrait la date que l'on
converti en timestamp (durée en seconde depuis 1970)
stattime=$(date -d "$(stat toto.txt | grep Modify | cut -c8-27)" +%s)
# on fait la différence entre la date courante et la date de
modification de fichier.
diff=$(( $(date +%s) - $stattime ))
# on calcule si cette difference est superieur a 15*60 secondes
[ $diff -gt 600 ] && echo "more than 600" || echo "less than 600"
Tu mets ces lignes et tu lance un cron toute les x minutes qui verfie
que tout est bon et si cela dépasse 15 minutes (le truc more than 600)
tu fais quelque chose (envoi d'un courriel ou autre).
Bien sur il faut tester le truc et faire attention au fait que je teste
le fichier toto.txt et pas ton fichier.
Le | grep Modify récupére la chaine de caractères Modify de la commande
stat et le cut -c8-27 récupére la chaine de caractères entre la 8 et la
27 eme position de la chaine initiale. Il faut bien regarder si cela
colle avec la sortie de stat sur ta machine.
Le timestamp est utile car comme cela on ne fait qu'une soustraction en
seconde.
Je suis pas très bon en bash et il faut peut être rajouter des tests
pour être sur que le fichier existe ou autre subtilités.
Tu avais raison, avec le n ça fonctionne j'ai bien le compteur à 1
on peut utiliser l'astuce donnée par David Chalon faire un grep [ "$(grep utilisateur BatchMajInfoUtilisateurEmargos20170602090001.log | wc -l)" == "1" ] && echo 'ok' || echo 'KO' devrait marcher.
Je vais remonter cette annomalie pour qu'il rajoute le n dans le fichier généré, en attendant on me demande de faire une moulinette qui vérifie que le script qui génère ce fichier soit bien exécuter toutes les 15 mintues. voici son vrai nom : voici : BatchMajInfoUtilisateurEmargos20170602090001.log C'est ce fameux fichier qui doit contenir le n Je me demande bien comment faire ça, je peux rajouter dans le script en crontab, de générer un fichier qui contiendrait la date du jour + heure et minute du genre
je ne comprends pas trop le problème. Je veux dire tu veux savoir si le fichier a été crée il y a moins de 15 minutes. En unix on ne connait pas la date de création d'un fichier mais en fait dans ton cas cela ne doit pas être un problème car j'imagine que la moulinette réécrit le meme fichier à chaque fois. donc la commande stat doit pouvoir etre utiliser par exemple stat toto.txt renvoie File: toto.txt Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fe01h/65025d Inode: 537127084 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1001/ AAAA) Gid: ( 1001/ AAAA) Access: 2017-06-02 11:21:00.848700391 +0200 Modify: 2017-06-02 11:21:00.848700391 +0200 Change: 2017-06-02 11:21:00.848700391 +0200 Birth: - donc les date d'Acces de modification et de changement sont les meme. C'est la date de creation. Comme tu modifie pas le fichier à priori on doit pouvoir utiliser la date de modify. On peut donc utiliser le script suivant. # on recupere la valeur de modify et on extrait la date que l'on converti en timestamp (durée en seconde depuis 1970) stattime=$(date -d "$(stat toto.txt | grep Modify | cut -c8-27)" +%s) # on fait la différence entre la date courante et la date de modification de fichier. diff=$(( $(date +%s) - $stattime )) # on calcule si cette difference est superieur a 15*60 secondes [ $diff -gt 600 ] && echo "more than 600" || echo "less than 600" Tu mets ces lignes et tu lance un cron toute les x minutes qui verfie que tout est bon et si cela dépasse 15 minutes (le truc more than 600) tu fais quelque chose (envoi d'un courriel ou autre). Bien sur il faut tester le truc et faire attention au fait que je teste le fichier toto.txt et pas ton fichier. Le | grep Modify récupére la chaine de caractères Modify de la commande stat et le cut -c8-27 récupére la chaine de caractères entre la 8 et la 27 eme position de la chaine initiale. Il faut bien regarder si cela colle avec la sortie de stat sur ta machine. Le timestamp est utile car comme cela on ne fait qu'une soustraction en seconde. Je suis pas très bon en bash et il faut peut être rajouter des tests pour être sur que le fichier existe ou autre subtilités. Desolé si j'ai pas bien compris le problème L.
=c3
Charles Plessy, le 2017-06-02 :
Bonjour, c'est vendredi !
Bonjour, béni soit le vendredi !
pourquoi s'ennuyer avec des outils standards alors qu'on a Perl 6 ?
Pourquoi s'ennuyer avec des outils alors qu'il y a tout ce qu'il faut, tout frais compilé, au sein même des shells bash 3 et plus ? :-D Si le fichier à lire est `fichier`, alors les trois commandes suivantes devraient marcher : $ builtin mapfile lignes < "fichier" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok Considérant les fichiers `fichier0` à `fichier3` suivants et leur contenu : $ xxd fichier0 # vide $ xxd fichier1 # une ligne sans caractère de fin de ligne 00000000: 6e6f 656f 6c noeol $ xxd fichier2 # une ligne avec caractère de fin de ligne 00000000: 656f 6c0a eol. $ xxd fichier3 # deux lignes 00000000: 6c31 0a6c 320a l1.l2. Les résultat des commandes pour chacun de ces fichier est disponible dans la copie d'écran suivante : $ builtin mapfile lignes < "fichier0" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok $ builtin mapfile lignes < "fichier1" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok ok $ builtin mapfile lignes < "fichier2" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok ok $ builtin mapfile lignes < "fichier3" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok Bonne fin de builtin vendredi et bon builtin week-end, -- builtin Étienne Mollier
Charles Plessy, le 2017-06-02 :
Bonjour, c'est vendredi !
Bonjour, béni soit le vendredi !
pourquoi s'ennuyer avec des outils standards alors qu'on a Perl
6 ?
Pourquoi s'ennuyer avec des outils alors qu'il y a tout ce qu'il
faut, tout frais compilé, au sein même des shells bash 3 et
plus ? :-D
Si le fichier à lire est `fichier`, alors les trois commandes
suivantes devraient marcher :
$ builtin mapfile lignes < "fichier"
$ builtin test 1 = "${#lignes[@]}" && builtin echo ok
Considérant les fichiers `fichier0` à `fichier3` suivants et leur
contenu :
$ xxd fichier0 # vide
$ xxd fichier1 # une ligne sans caractère de fin de ligne
00000000: 6e6f 656f 6c noeol
$ xxd fichier2 # une ligne avec caractère de fin de ligne
00000000: 656f 6c0a eol.
$ xxd fichier3 # deux lignes
00000000: 6c31 0a6c 320a l1.l2.
Les résultat des commandes pour chacun de ces fichier est
disponible dans la copie d'écran suivante :
$ builtin mapfile lignes < "fichier0"
$ builtin test 1 = "${#lignes[@]}" && builtin echo ok
$ builtin mapfile lignes < "fichier1"
$ builtin test 1 = "${#lignes[@]}" && builtin echo ok
ok
$ builtin mapfile lignes < "fichier2"
$ builtin test 1 = "${#lignes[@]}" && builtin echo ok
ok
$ builtin mapfile lignes < "fichier3"
$ builtin test 1 = "${#lignes[@]}" && builtin echo ok
Bonne fin de builtin vendredi et bon builtin week-end,
--
builtin Étienne Mollier <etienne.mollier@mailoo.org>
pourquoi s'ennuyer avec des outils standards alors qu'on a Perl 6 ?
Pourquoi s'ennuyer avec des outils alors qu'il y a tout ce qu'il faut, tout frais compilé, au sein même des shells bash 3 et plus ? :-D Si le fichier à lire est `fichier`, alors les trois commandes suivantes devraient marcher : $ builtin mapfile lignes < "fichier" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok Considérant les fichiers `fichier0` à `fichier3` suivants et leur contenu : $ xxd fichier0 # vide $ xxd fichier1 # une ligne sans caractère de fin de ligne 00000000: 6e6f 656f 6c noeol $ xxd fichier2 # une ligne avec caractère de fin de ligne 00000000: 656f 6c0a eol. $ xxd fichier3 # deux lignes 00000000: 6c31 0a6c 320a l1.l2. Les résultat des commandes pour chacun de ces fichier est disponible dans la copie d'écran suivante : $ builtin mapfile lignes < "fichier0" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok $ builtin mapfile lignes < "fichier1" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok ok $ builtin mapfile lignes < "fichier2" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok ok $ builtin mapfile lignes < "fichier3" $ builtin test 1 = "${#lignes[@]}" && builtin echo ok Bonne fin de builtin vendredi et bon builtin week-end, -- builtin Étienne Mollier