Navigation simplifiée : Blog | Forum | Youtube | Mini-chat

Compter pour chaque lettre de l'alphabet le nombre de mots (dans un fichier .txt) qui la comporte

#!/bin/bash
#Auteur : Josselin Fatah-Roux
#Compte pour chaque lettre de l'alphabet le nombre de mots - contenus dans un fichier texte - qui la comporte :

#On récupère le chemin absolu du fichier "dico.txt" s'il existe, sinon on obtient une chaîne de caractère vide :
chemin=$(sudo find /home -name $1)
echo "Le chemin du fichier est : $chemin"

#On créer ou efface le contenu du fichier statistiques.txt :
echo '' > statistiques.txt

#On vérifie que find renvoie bien un résultat (chaîne de caractère), -z confirme si la chaîne de caractère est vide :
if [ -z "$chemin" ]
then
	#Dans le cas où la chaine de caractère est vide on le précise et on arrête le script :
	echo "Le fichier n'existe pas et/ou ne se situe pas dans le répertoire /home"
else
	#Création d'un tableau alphabétique :
	alphabet=('A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z')
	#${alphabet[*]} affiche le tableau alphabet en entier :
	echo "L'alphabet est : ${alphabet[*]}"
	#${#alphabet[*]} affiche le nombre d'éléments dans le tableau :
	echo "L'alphabet contient : ${#alphabet[*]} lettres"
	#On soustrait 1 à ${#alphabet[*]} car le premier indice d'un tableau est 0 :
	for i in $(seq 0 $((${#alphabet[*]} - 1)))
	do
		#On calcul le nombre de mots contenant la lettre de l'alphabet actuellement traitée  dans la boucle :
		compteurs[$i]=$(grep ${alphabet[$i]} $chemin | wc -l)
		#On enregistre les statistiques au fur et à mesure de l'évolution de la boucle dans un fichier texte :
		echo "${compteurs[$i]} - ${alphabet[$i]}" >> statistiques.txt
	done
	echo "Les statistiques pour chaque lettre sont respectivement :"
	#On vérifie que le deuxième paramètre --description existe et on le fait jouer s'il existe :
	if [ $# -ge 2 ] && [ $2 = '--description' ]
	then
		#Si le deuxième paramètre existe alors on remplace dans le fichier statistiques.txt pour chaque ligne le caractère - par la chaîne de caractère : mot(s) contenant la lettre :
		sed -i 's/-/mot(s) contenant la lettre/g' statistiques.txt
		#Puis on trie numériquement par ordre décroissant les données du fichier statistiques.txt :
		sort -nr statistiques.txt
	else
		#Si le deuxième paramètre n'existe pas alors on trie uniquement numériquement par ordre décroissant les données du fichier statistiques.txt :
		sort -nr statistiques.txt
	fi
fi

#On supprime le fichier statistiques.txt :
rm statistiques.txt

Donner les droits d'exécution au fichier langstat.sh (fichier disponible en dessous) :

chmod u+rwx,g+rx-w,o+rx-w langstat.sh
ls -l

Exécuter le fichier langstat.sh :

./langstat.sh dico.txt --description

dico.txt

langstat.sh

Commentaires

Vous n'êtes pas connecté pour pouvoir participer !

:

Page :