Afficher le dernier nombre d'une suite de chiffre en bash
Résolu/Fermé
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
-
3 mars 2020 à 00:52
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 6 mars 2020 à 10:27
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 6 mars 2020 à 10:27
A voir également:
- Afficher le dernier nombre d'une suite de chiffre en bash
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel trier par ordre croissant chiffre - Guide
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Le dernier iphone - Guide
- Excel afficher 0 avant nombre - Guide
5 réponses
mamiemando
Messages postés
33333
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 octobre 2024
7 801
Modifié le 5 mars 2020 à 10:43
Modifié le 5 mars 2020 à 10:43
Bonjour
Une solution possible qui évite de ne lire la liste qu'une fois (dans ton cas, tu la lis avec
Note que dans ton problème, tu n'as pas précisé (sauf mauvaise lecture de ma part) ce qu'il est sensé arrivé si on fournit un numéro qui n'est pas dans la liste. Donc moi j'ai choisi de renvoyer "?".
Exemples:
Bonne chance
Une solution possible qui évite de ne lire la liste qu'une fois (dans ton cas, tu la lis avec
grepet dans ta boucle
for) :
#!/bin/bash x="$1" l="01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30" found=0 ret="?" for i in $l; do if [ "$found" -eq 0 ] then if [ "$x" -eq "$i" ] then found=1; expected=$(($x + 1)); fi else if [ "$i" -eq "$expected" ] then expected=$((expected+1)); else ret=$(($expected-1)) break; fi fi done echo $ret exit 0
Note que dans ton problème, tu n'as pas précisé (sauf mauvaise lecture de ma part) ce qu'il est sensé arrivé si on fournit un numéro qui n'est pas dans la liste. Donc moi j'ai choisi de renvoyer "?".
Exemples:
(mando@aldur) (~) $ ./toto.sh 2
4
(mando@aldur) (~) $ ./toto.sh 4
4
(mando@aldur) (~) $ ./toto.sh 7
10
(mando@aldur) (~) $ ./toto.sh 8
10
(mando@aldur) (~) $ ./toto.sh 5
?
Bonne chance
mamiemando
Messages postés
33333
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
31 octobre 2024
7 801
3 mars 2020 à 08:57
3 mars 2020 à 08:57
Bonjour,
Je n'ai pas compris la question. Le dernier élément de quelle suite ? Parce que là, tel que tu as écrit ton problème je répondrais toujours "30". Et je ne comprends pas la logique (pourquoi 02 retourne 04, pourquoi 07 retourne 10, pourquoi 08 retourne 10). Mais bon en tout cas, en bash il y a des tableaux et c'est peut être le plus simple...
http://www.ixany.org/docs/Shell_Les_tableaux_en_bash.html
Bonne chance
Je n'ai pas compris la question. Le dernier élément de quelle suite ? Parce que là, tel que tu as écrit ton problème je répondrais toujours "30". Et je ne comprends pas la logique (pourquoi 02 retourne 04, pourquoi 07 retourne 10, pourquoi 08 retourne 10). Mais bon en tout cas, en bash il y a des tableaux et c'est peut être le plus simple...
http://www.ixany.org/docs/Shell_Les_tableaux_en_bash.html
Bonne chance
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
3 mars 2020 à 09:18
3 mars 2020 à 09:18
Salut mamie,
Il parle de la suite logique des nombres.
04 parce qu'il manque le 05 et le 06. Idem pour le 10, il manque 11, 12 et 13.
Je reconnais qu'à la 1ère lecture j'ai eu la même réaction que toi ;-)
Il parle de la suite logique des nombres.
04 parce qu'il manque le 05 et le 06. Idem pour le 10, il manque 11, 12 et 13.
Je reconnais qu'à la 1ère lecture j'ai eu la même réaction que toi ;-)
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
3 mars 2020 à 11:42
3 mars 2020 à 11:42
bonjour,
oui, zipe31 c'est ça. je cherche a avoir le dernier nombre de la suite en fonction de ce que je lui donne en paramètre jusqu'au prochain trou dans cette suite.
oui, zipe31 c'est ça. je cherche a avoir le dernier nombre de la suite en fonction de ce que je lui donne en paramètre jusqu'au prochain trou dans cette suite.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
3 mars 2020 à 14:21
3 mars 2020 à 14:21
As-tu commencé à élaborer une quelconque ébauche d'un semblant de script ?
À lire : Demander de l'aide pour vos exercices sur CCM
À lire : Demander de l'aide pour vos exercices sur CCM
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
3 mars 2020 à 15:10
3 mars 2020 à 15:10
bonjour,
pas encore, j'attendais d'avoir un début de solution au problème posé, afin de pouvoir basé mon script sur ça. et dans le cas ou ça n'est pas possible a réaliser, peut être procéder d'une autre façon.
merci beaucoup,
Jerem
pas encore, j'attendais d'avoir un début de solution au problème posé, afin de pouvoir basé mon script sur ça. et dans le cas ou ça n'est pas possible a réaliser, peut être procéder d'une autre façon.
merci beaucoup,
Jerem
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
3 mars 2020 à 15:36
3 mars 2020 à 15:36
Pour être possible, c'est possible, mais comme dit plus haut, on n'est pas là pour faire le boulot des autres, on est là pour les aider à avancer ;-)
$ ./foo.sh
01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30
Entrez une date : 14
17
$ ./foo.sh
01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30
Entrez une date : 08
10
$ ./foo.sh
01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30
Entrez une date : 21
23
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
3 mars 2020 à 16:02
3 mars 2020 à 16:02
Bonjour,
en fait, je ne sais pas du tout par où commencé pour avoir une tel sortie. la seule chose que je vais savoir faire, c'est afficher le nombre choisit et les suivant jusqu'à la fin de la ligne.
donc si vous avez des pistes pour l'utilitaire préféré pour cette usage, je suis preuneur de conseil.
au départ, je pensais utiliser une boucle for, en incrémentant la boucle du nombre et vérifier si ça correspond a mon nombre suivant et ainsi de suite, mais je pense qu'il y a plus simple que ça.
merci d'avance pour vos pistes, si vous en avez à me donner.
en fait, je ne sais pas du tout par où commencé pour avoir une tel sortie. la seule chose que je vais savoir faire, c'est afficher le nombre choisit et les suivant jusqu'à la fin de la ligne.
donc si vous avez des pistes pour l'utilitaire préféré pour cette usage, je suis preuneur de conseil.
au départ, je pensais utiliser une boucle for, en incrémentant la boucle du nombre et vérifier si ça correspond a mon nombre suivant et ainsi de suite, mais je pense qu'il y a plus simple que ça.
merci d'avance pour vos pistes, si vous en avez à me donner.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
>
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
3 mars 2020 à 16:08
3 mars 2020 à 16:08
au départ, je pensais utiliser une boucle for, en incrémentant la boucle du nombre et vérifier si ça correspond a mon nombre suivant et ainsi de suite, mais je pense qu'il y a plus simple que ça.Non, non, c'est ce que j'ai utilisé.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
>
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
3 mars 2020 à 16:13
3 mars 2020 à 16:13
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
Modifié le 5 mars 2020 à 10:28
Modifié le 5 mars 2020 à 10:28
Bonjour,
j'ai fini par réussir a faire quelque chose qui fonctionne, mais je suis pas très content du résultat.
je suis du coup preneur des optimisations que vous jugerez nécessaire
voilà le petit script:
merci pour votre aide :)
j'ai fini par réussir a faire quelque chose qui fonctionne, mais je suis pas très content du résultat.
je suis du coup preneur des optimisations que vous jugerez nécessaire
voilà le petit script:
#!/bin/bash jour="$1" date1="$(echo "$jour")" listedate="01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30" for date in $(echo "$listedate" |grep -Eo "$jour.*"); do if [ "$date1" -ne "$date" ]; then break; fi let date=date1++ done let date1-- echo "date $date1"
merci pour votre aide :)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
5 mars 2020 à 08:21
5 mars 2020 à 08:21
Re-
Sans compter que le "
jour="$1"Tout simplement :
date1="$(echo "$jour")"
date1="$1";-\
for date in $(echo "$listedate" |grep -Eo "$jour.*");En fait il n'y a pas de boucle là, puisque le grep ne sort qu'une occurrence ;-(
Sans compter que le "
.*" après "jour" ne sert strictement à rien ;-(
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 mars 2020 à 19:21
5 mars 2020 à 19:21
bonjour,
en fait, je fais le grep comme ça, pour n'afficher que les nombres suivant le $jour. si je ne fais pas comme ça, ma boucle ne fonctionne pas, puisque le premier nombre de $date n'est pas = a $date1.
si ma méthode n'est pas bonne, j'aimerai bien un peu plus d'aide, pour obtimisé tout ça, parce que ça fonctionne, mais si ça peut être optimisé et avoir des détails sur quoi faire et comment le faire, c'est mieux :)
merci en tout cas déjà pour l'aide apportée
Jerem
en fait, je fais le grep comme ça, pour n'afficher que les nombres suivant le $jour. si je ne fais pas comme ça, ma boucle ne fonctionne pas, puisque le premier nombre de $date n'est pas = a $date1.
si ma méthode n'est pas bonne, j'aimerai bien un peu plus d'aide, pour obtimisé tout ça, parce que ça fonctionne, mais si ça peut être optimisé et avoir des détails sur quoi faire et comment le faire, c'est mieux :)
merci en tout cas déjà pour l'aide apportée
Jerem
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 417
>
jeremyp3
Messages postés
22
Date d'inscription
lundi 13 avril 2009
Statut
Membre
Dernière intervention
5 mars 2020
6 mars 2020 à 10:27
6 mars 2020 à 10:27
Le grep peut être remplacé par un mécanisme interne au shell (Remplacement de paramètres) :
Dans ton script, ça donnerait :
Et en sortie :
$ A="01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30"
$ i=14
$ echo "${A#*${i} }"
15 16 17 20 21 22 23 28 29 30
Dans ton script, ça donnerait :
$ cat bar.sh #!/bin/bash jour="$1" listedate="01 02 03 04 07 08 09 10 14 15 16 17 20 21 22 23 28 29 30" for date in ${listedate#*${jour} } do echo "${date}" done
Et en sortie :
$ ./bar.sh 14
15
16
17
20
21
22
23
28
29
30