Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 sad
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 wink

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)

kalene a écrit :

Celle la fonctionne bien le resultat est bien dans la console et trié :

Je vois mal comment…

kalene a écrit :

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