#1 Le 27/12/2019, à 17:36
- kalene
(bash) Générateur de stats (Résolu)
Bonjour,
J'ai créer un code permettant de compter combien de lettres similaire il y a, puis de les trier pas ordre décroissant sauf que le trie ne fonctionne pas
Et si possible si quelqu'un a une autre commande pour faire la même chose (avec "cat" par exemple) je suis preneur !
for letter in {A..Z}; do
occurrences=$(grep "$letter" "$1" | wc -l | sort -rn)
echo "$occurrences - $letter"
done
Code complet :
#!/bin/bash
select_file_and_create_out_file_results(){
if [ -z "$1" ]; then
while true; do
read -r -p 'Select your dictionary : ' dicoSource
if [ -z "$dicoSource" ]; then
echo "Inserer du texte"
continue
elif [ -e "$dicoSource" ]; then break
else echo "Le chemin entrer n'est pas valide"
fi
done
while true; do
read -r -p 'Enter your file name : ' fileResulat
if [ -z "$fileResulat" ]; then
echo "Insert text pls"
continue
elif [ ! -e "$fileResulat".txt ]; then break
else echo "File exist"
fi
done
for letter in {A..Z}; do
occurrences=$(grep "$letter" "$dicoSource" | wc -l | sort -rn)
echo "$occurrences - $letter" >> "$fileResulat".txt
done
fi
}
show_results_in_terminal(){
if [ -e "$1" ]; then
for letter in {A..Z}; do
occurrences=$(grep "$letter" "$1" | wc -l | sort -rn)
echo "$occurrences - $letter"
done
else
if [ ! -e "$1" ] && [ -n "$1" ]; then
echo "File not found"
fi
fi
}
main(){
show_results_in_terminal "$@"
select_file_and_create_out_file_results "$@"
}
main "$@"
Merci d'avance
Dernière modification par kalene (Le 28/12/2019, à 16:31)
Hors ligne
#2 Le 27/12/2019, à 17:44
- Watael
Re : (bash) Générateur de stats (Résolu)
c'est la sortie de la boucle qu'il faut trier.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 27/12/2019, à 18:02
- kamaris
Re : (bash) Générateur de stats (Résolu)
Mais non, même pas : bash a déjà tout ordonné, et rien n'a désordonné.
Le tri ne sert à rien, et wc -l peut être évité :
occurrences=$(grep -c "$letter" "$1")
EDIT : ah, autant pour moi : on parle de tri selon les chiffres et non selon les lettres, donc il faut bien trier la sortie de la boucle
Dernière modification par kamaris (Le 27/12/2019, à 18:08)
Hors ligne
#4 Le 27/12/2019, à 18:35
- kalene
Re : (bash) Générateur de stats (Résolu)
Très bien j'ai réussi pour qu'il le trie dans la console. Mais pour la fonction "select_file_and_create_out_file_results" j'arrive pas
Celle la fonctionne bien le resultat est bien dans la console et trié :
show_results_in_terminal(){
if [ -e "$1" ]; then
for letter in {A..Z}; do
occurrences=$(grep "$letter" "$1" | wc -l)
echo "$occurrences - $letter" >> out.txt
done
sort -rn out.txt
rm out.txt
else
if [ ! -e "$1" ] && [ -n "$1" ]; then
echo "File not found"
fi
fi
}
Mais pour cette fonction le fichier qu'on créer "fileResulat" je sais pas comment le trier :
select_file_and_create_out_file_results(){
if [ -z "$1" ]; then
while true; do
read -r -p 'Select your dictionary : ' dicoSource
if [ -z "$dicoSource" ]; then
echo "Inserer du texte"
continue
elif [ -e "$dicoSource" ]; then break
else echo "Le chemin entrer n'est pas valide"
fi
done
while true; do
read -r -p 'Enter your file name : ' fileResulat
if [ -z "$fileResulat" ]; then
echo "Insert text pls"
continue
elif [ ! -e "$fileResulat".txt ]; then break
else echo "File exist"
fi
done
for letter in {A..Z}; do
occurrences=$(grep "$letter" "$dicoSource" | wc -l )
echo "$occurrences - $letter" >> "$fileResulat".txt
done
fi
}
Hors ligne
#5 Le 27/12/2019, à 19:10
- kamaris
Re : (bash) Générateur de stats (Résolu)
Celle la fonctionne bien le resultat est bien dans la console et trié :
Je vois mal comment…
Mais pour cette fonction le fichier qu'on créer "fileResulat" je sais pas comment le trier :
Dans ta précédente demande, j'avais déjà modifié ton code au niveau d'une boucle for pour écrire d'un seul coup dans un fichier : https://forum.ubuntu-fr.org/viewtopic.p … #p22196261
for image in "$directory"/**/*.{png,PNG,jpg,jpeg,gif}; do
…
done >> "$sortie"
En t'inspirant de ça, tu dois pouvoir effectuer ton tri (le caler où il faut).
Hors ligne
#6 Le 27/12/2019, à 19:26
- kalene
Re : (bash) Générateur de stats (Résolu)
Pourtant ça marche j'ai bien :
278814 - E
229938 - A
219131 - I
210391 - R
207889 - S
179165 - N
176030 - T
158282 - O
108195 - U
106300 - L
98832 - C
74421 - M
72481 - D
69141 - P
48942 - G
43471 - B
36777 - F
35940 - H
34982 - Z
30562 - V
16340 - Q
11030 - Y
8262 - X
5743 - J
1595 - K
529 - W
dans la console
show_results_in_terminal(){
if [ -e "$1" ]; then
for letter in {A..Z}; do
occurrences=$(grep -c "$letter" "$1")
echo "$occurrences - $letter" >> out.txt
done
sort -rn out.txt
rm out.txt
else
if [ ! -e "$1" ] && [ -n "$1" ]; then
echo "File not found"
fi
fi
}
Dernière modification par kalene (Le 27/12/2019, à 19:30)
Hors ligne
#7 Le 27/12/2019, à 19:33
- kamaris
Re : (bash) Générateur de stats (Résolu)
Ah oui, autant pour moi, la commande sort écrit dans la sortie standard, désolé.
Décidément j'ai pas les yeux en face des trous aujourd'hui.
Hors ligne
#8 Le 27/12/2019, à 19:44
- kalene
Re : (bash) Générateur de stats (Résolu)
Après pour l'autre fonction j'arrive pas je sais pas ou introduire le sort ...
j'ai réussi a obtenir le trie tout a l'heure en faisant des tests mais le fichier contenais le contenu non trié et trié.
#!/bin/bash
select_file_and_create_out_file_results(){
if [ -z "$1" ]; then
while true; do
read -r -p 'Select your dictionary : ' dicoSource
if [ -z "$dicoSource" ]; then
echo "Inserer du texte"
continue
elif [ -e "$dicoSource" ]; then break
else echo "Le chemin entrer n'est pas valide"
fi
done
while true; do
read -r -p 'Enter your file name : ' fileResulat
if [ -z "$fileResulat" ]; then
echo "Insert text pls"
continue
elif [ ! -e "$fileResulat".txt ]; then break
else echo "File exist"
fi
done
for letter in {A..Z}; do
occurrences=$(grep -c "$letter" "$dicoSource")
echo "$occurrences - $letter"
done >> "$fileResulat".txt # ok mais je lui dit comment de trié ça ?
fi
}
Hors ligne
#9 Le 27/12/2019, à 19:47
- kamaris
Re : (bash) Générateur de stats (Résolu)
Là où tu peux mettre une redirection « >> » tu peux mettre un pipe « | » :
done | sort -rn >> "$fileResulat".txt
Hors ligne
#10 Le 27/12/2019, à 20:44
- kalene
Re : (bash) Générateur de stats (Résolu)
AH oui merde moi je le mettait pas comme ça dans mes tests, j'avais tout essayé sauf de le mettre ici !
Merci encore à toi Kamaris et aussi Watael.
Hors ligne