#1 Le 07/10/2007, à 20:37
- Thibaud
[Résolu] Bash : script pour compter des mots
Bonjour!
Je voudrais faire un script bash mais j'ai fait mes premiers pas sur GFA Basic (un genre de Pascal) il y a 10 ans donc ne rigolez pas !
C'est aussi l'occasion de m'y remettre. J'ai lu un wikilivre sur bash (http://fr.wikibooks.org/wiki/Programmation_Bash) mais c'est un peu sommaire. Bien sûr j'ai la commande man.
J'ai besoin de compter les mots d'un fichier texte et d'afficher en sortie le nombre d'occurrence de chacun de ces mots. Dans un second temps, je voudrais n'afficher que les mots qui ne sont pas déjà présent dans un second fichier.
Il faut d'abord savoir lire le fichier TXT, or read ne lit pas un fichier mais une entrée utilisateur.
Je suppose que je dois faire une boucle while avec un cut pour prendre le premier mot à gauche (left) jusqu'à l'un des caractères définissant la fin du mot (qui est autre chose qu'une lettre ou qu'un caractère accentué), donc avec un fi pour vérifier qu'il y a au moins un second mot avant d'utiliser cut. Ensuite, une fonction de recherche (grep ?) recherche si ce mot est utilisé dans un fichier LISTE, et si oui, elle incrémente le nombre qui est devant lui (là je ne sais pas comment faire).
Ce fichier LISTE ressemblerait donc à ça :
ubuntu, 12
office, 7
Dans un second temps, il s'agit de comparer deux fichiers LISTE1 et LISTE2 et de produire un fichier DIFFERENCE. Une boucle lit le premier fichier mot après mot ; elle compare sous le même principe évoqué ci-dessus (ça pourrait faire la fonction "comptage"). Si le chiffre retourné est égal à 0, ça signifie que le mot de la LISTE1 n'existe pas dans la LISTE2, donc on ajoute le mot au fichier DIFFERENCE :
echo $resultat >> $DIFFERENCE
Voilà , il me manque quelques commandes et surtout de la pratique, mais ça peut être un bon exercice !
Merci de l'aide,
Thibaud.
Dernière modification par Thibaud (Le 02/12/2007, à 15:01)
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne
#2 Le 08/10/2007, à 02:42
- best_friend_fr
Re : [Résolu] Bash : script pour compter des mots
Salut
Piste de recherche
#!/bin/bash
LINES=`cat $1 | sed 's/[,. ]/\n/g' `
echo $LINES
rm -f $2
COUNT=0
LAST='kdfhjfgdkjhsdfkjhdgsfkjhfuk'
for LINE in $LINES
do
if [ $LINE = $LAST ]
then
COUNT=$((COUNT+1))
else
if [ $COUNT -gt 0 ]
then
echo $LAST $COUNT >> $2
fi
COUNT=1
LAST=$LINE
fi
done
echo $LAST $COUNT >> $2
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#3 Le 08/10/2007, à 02:46
- compte supprimé
Re : [Résolu] Bash : script pour compter des mots
Bonsoir,
Ça, c'est un peu moins sommaire sur bash...
http://abs.traduc.org/abs-5.0-fr/
A+
#4 Le 03/11/2007, à 13:06
- Thibaud
Re : [Résolu] Bash : script pour compter des mots
Merci de ces infos. J'en arrive donc au script ci-dessous, mais je n'arrive pas à utiliser la commande sed avec les guillemets ? Par exemple, l'instruction :
echo -e "salut\042toi" | sed 's/\x22$/\n/'
rend salut"toi et non salut toi
Voici donc le script :
#!/bin/bash
TXT='harry_pother_and_the_chamber_of_secrets.txt'
CAR='s/[,;!?.]/\n/g'
# LINES=`cat $TXT | sed '"s/[,;!?.]/\n/g ' `
LINES=`cat $TXT | sed -e $CAR `
#echo $LINES
rm -f 2
COUNT=0
LAST='kdfhjfgdkjhsdfkjhdgsfkjhfuk'
for LINE in $LINES
do
echo $LINE
if [ $LINE = $LAST ]
then
COUNT=$((COUNT+1))
else
if [ $COUNT -gt 0 ]
then
echo $LAST $COUNT >> 2
fi
COUNT=1
LAST=$LINE
fi
done
echo $LAST $COUNT >> 2
echo Terminé
Je nomme ce script 'mots', et j'utilise un second script qui y fait appel :
#!/bin/bash
# diviser le texte en mots
./mots>chamber_mots
# ordonner et compter les occurences
cat chamber_mots | sort | uniq -c | sort -d -n -r > chamber_uniq_sort
Merci de votre indulgence, je débute!...:|
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne
#5 Le 02/12/2007, à 15:00
- Thibaud
Re : [Résolu] Bash : script pour compter des mots
Après moult recherches, voilà la procédure !
cat fichier |strings | tr "[" " "|tr "]" " "| tr -d "^$" | tr -d '0-9' | tr "A-Z" "a-z"| tr '\011' ' '| tr '\047' ' '| tr -d '\042' | sed -e 's/[.$=`*_~(/\);:?,! ]/\n/g' | sed -e 's/-$//g' -e 's/^-//g'| sort | grep -v '^$' |uniq -c |sort -nr
Cette ligne affiche le nombre de mots classés par ordre croissant d'un texte, après remplacement de certains caractères spéciaux...
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne