#1 Le 29/09/2021, à 16:50
- jojoba
programmation bash aide pourcentage/taux
bonjour les internautes! pour mon boulot, on doit se mettre à programmer en langage bash, et ça coince pas mal pour moi en info.
je dois à l'aide d'une commande :
grep -o
faire le pourcentage des lettres SL dans mon fichier, c'est également indiqué que pour cela il faudra potentiellement réaliser plusieurs étapes ...
Voilà la nature de mon problème, j'ai pas mal bataillé sur internet pour trouver des commandes mais sans grand succès je m'en remets donc à vous, merci d'avance!
Hors ligne
#2 Le 29/09/2021, à 16:58
- Watael
Re : programmation bash aide pourcentage/taux
salut,
avant de chercher des commandes, commence par établir la liste des étapes indispensables.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 29/09/2021, à 21:45
- jojoba
Re : programmation bash aide pourcentage/taux
alors je pense que dénombrer les différents caractères du fichier, puis dénombrer les caractères S L et ensuite calculer le pourcentage avec la commande bc serait une option .... mais dans ces cas là je n'utiliserai pas la commande grep -o ce qui est interdit.
l'impasse!
Hors ligne
#4 Le 29/09/2021, à 21:54
- Watael
Re : programmation bash aide pourcentage/taux
dans ces cas là je n'utiliserai pas la commande grep -o
et pourquoi ça ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 29/09/2021, à 22:09
- Hizoka
Re : programmation bash aide pourcentage/taux
Salut,
C'est quoi ton boulot pour te forcer à faire tout ça ?
Tu n'as le droits qu'à cette commande ?
Je ne pige rien...
Tu veux compter le nombre de S et de L dans ton fichier et tu peux ne le faire qu'avec grep ?
Si tu ne veux utiliser que grep, il te faut aussi l'option -c.
Si tu as le droits à d'autres commandes, tu peux utiliser wc aussi.
Ou des boucles pour compter si tu n'as pas le droit à d'autres commandes...
En tout cas, penche toi sur les classes de caractères genre ... [slSL] et [^slSL]...
sSlL=$(Mes greps main.py)
# 4384
Autres=$(Mes greps main.py)
# 46637
Poucentage=$(( (sSlL * 100) / Autres)
# 9.4 => 9
C'est ça que tu veux ?
Si oui, il ne faut que 2 x 2 grep qui ne différent au final que de 2 caractères.
Dernière modification par Hizoka (Le 29/09/2021, à 22:20)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 29/09/2021, à 22:19
- jojoba
Re : programmation bash aide pourcentage/taux
dans ces cas là je n'utiliserai pas la commande grep -o
et pourquoi ça ?
je ne sais pas on m'a tjrs dit qu'on compte avec une autre commande qu'est wc, je suis perdu ...
Salut,
C'est quoi ton boulot pour te forcer à faire tout ça ?
Tu n'as le droits qu'à cette commande ?
Je ne pige rien...Tu veux compter le nombre de S et de L dans ton fichier et tu peux ne le faire qu'avec grep ?
Si tu ne veux utiliser que grep, il te faut aussi l'option -c.Si tu as le droits à d'autres commandes, tu peux utiliser wc aussi.
Ou des boucles pour compter si tu n'as pas le droit à d'autres commandes...
En tout cas, penche toi sur les classes de caractères genre ... [slSL] et [^slSL]...
disons que je suis un vieux chimiste qui doit se mettre à la page! et pour la commande grep -o ce sont mes collègues qui m'ont dit de faire avec, et empoté que je suis, j'ai dit oui sans me renseigner ...
Hors ligne
#7 Le 29/09/2021, à 22:21
- Hizoka
Re : programmation bash aide pourcentage/taux
J'ai mis à jour ma réponse ci-dessus pendant que tu répondais.
Comme je le dis :
sSlL=$(Mes greps main.py)
# 4384
Autres=$(Mes greps main.py)
# 46637
Poucentage=$(( (sSlL * 100) / Autres)
# 9.4 => 9
C'est ça que tu veux ?
Si oui, il ne faut que 2 x 2 grep qui ne différent au final que de 2 caractères.
grep A | grep B
puis
grep C (qui diffère de A d'1 caractère) | grep D (qui diffère de B d'1 caractère)
Dernière modification par Hizoka (Le 29/09/2021, à 22:22)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 29/09/2021, à 23:14
- Watael
Re : programmation bash aide pourcentage/taux
pourquoi 2x2 grep ?
2 grep seulement :
un grep pour obtenir la liste de toutes les lettres (dont on fera le compte avec wc)
un second grep pour obtenir la liste des sS et des lL (dont on fera le compte avec wc)
puis*, on fait le calcul avec bc.
--
* on peut tout faire sur une ligne, sans variables, avec des Substitutions de commandes.
Dernière modification par Watael (Le 29/09/2021, à 23:16)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 30/09/2021, à 06:27
- pingouinux
Re : programmation bash aide pourcentage/taux
Bonjour,
Une façon de faire (qui reprend ce qui a été dit précédemment) :
nb_car=$( wc -l < <(grep -io 's\|l' fichier) )
nb_tot=$( wc -l < <(grep -o '.' fichier) )
printf "Pourcentage de slSL = %6.2f %%\n" $(bc -l <<<"100 * $nb_car / $nb_tot")
Hors ligne
#10 Le 30/09/2021, à 08:25
- bruno
Re : programmation bash aide pourcentage/taux
L’énoncé du problème manque de précision. Faut-il calculer le pourcentage de s et de l (en minuscules, en majuscules ?) par rapport aux nombres total de caractères dans le fichier y compris les saut de lignes, tabulations, etc. ; ou par rapport au nombre total de caractères alphanumériques ; ou par rapport au nombre total de cratères imprimables ?
- nombre total de caractères, y compris les sauts de lignes, tabulations, etc. :
wc -m < fichier
- nombre total de caractères sans les lignes vides et saut de lignes mais avec les espaces et tabulations :
grep -o '.' fichier
- nombre total de caractères alphanumériques :
tr -cd [:alnum:] < fichier | wc -m
- nombres total de caractères imprimables (alphanum+ponctuation) :
tr -cd [:graph:] < fichier | wc -m
et ainsi de suite voir man tr, man grep, man wc
- nombre d'occurrences de s,S,l et L :
tr -cd [sSlL] < fichier | wc -m
Dernière modification par bruno (Le 30/09/2021, à 10:23)
#11 Le 30/09/2021, à 08:42
- Hizoka
Re : programmation bash aide pourcentage/taux
@Watael
2 grep car je pensais qu'il n'avait le droit qu'à grep :
sSlL=$(grep -o "[sSlL]" main.py |grep -c "[sSlL]")
Autres=$(grep -o "[^sSlL]" main.py |grep -c "[^sSlL]")
Pourcentage=$(( ((sSlL + Autres) * 100) / Autres)
ou
sSlL=$(grep -o "[sSlL]" main.py |grep -c "[sSlL]")
Autres=$(grep -o "." main.py |grep -c ".")
Pourcentage=$(( (sSlL * 100) / Autres)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#12 Le 30/09/2021, à 11:39
- Watael
Re : programmation bash aide pourcentage/taux
ah, mais grep -c est aussi hors sujet, alors.
à l'aide d'une commande : grep -o faire le pourcentage des lettres SL dans mon fichier
je crois que la moyenne de l'apparition de caractères dans un texte, se fait sur l'ensemble des caractères du texte (y compris ceux dont on fait la moyenne).
on ne peut pas obtenir la moyenne d'apparitions d'éléments d'un ensemble auquel ces éléments n'appartiennent pas !
Dernière modification par Watael (Le 30/09/2021, à 11:40)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 30/09/2021, à 13:56
- bruno
Re : programmation bash aide pourcentage/taux
Si c'est pour faire des statistiques dans un texte (on ne sait pas si c'est du texte) alors :
nb_caracteres_alphanum=$(tr -cd [:alnum:] < fichier | wc -m)
nb_occurrences_sSlL=$(tr -cd [sSlL] < fichier | wc -m)
…
N.B. : apparemment tr est beaucoup plus rapide que grep
#14 Le 30/09/2021, à 14:10
- Hizoka
Re : programmation bash aide pourcentage/taux
C'est ça qui est génial, on se retrouve avec plein de solutions fonctionnelles
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 30/09/2021, à 14:26
- bruno
Re : programmation bash aide pourcentage/taux
Et j'apprends (ou retrouve) toujours au moins un truc au passage
#16 Le 30/09/2021, à 14:30
- Hizoka
Re : programmation bash aide pourcentage/taux
Pareil, j'aurais absolument pas pensé à utiliser tr pour le coup.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne