Le script
Avant de nous plonger dans le script, quelques explications sur les commandes les plus importantes (nous ne détaillerons pas les commandes basiques de bash utilisées --ls, cd, mkdir, etc.) :
Les commandes-clefs
wget -O
La commande wget
va nous permettre d'aspirer localement des pages web, et l'option -O
de rediriger la sortie de la commande dans le dossier
souhaité, avec le nom souhaité.
ex : wget -O
./dossier/unsite1.html http://www.unsite.com
lynx
-dump
lynx est
un navigateur en ligne de commande, l'option -dump
nous permet de n'afficher que la partie textuelle de l'URL
pointée. (ci-dessous : avec redirection de la sortie dans un
fichier texte)
ex : lynx -dump
./pages_aspirees/unsite.html > ./dump/unsite.txt
Cherche un motif donné dans le contenu d'un fichier. L'option -i permet de ne pas tenir compte de la casse, et l'option -o d'afficher en sortie uniquement le motif recherché.
ex
: egrep
-i -o "(roger|charlie|papa|tango)" mesmots.txt
[NB : cette commande a été utilisée
par ceux qui
n'ont pas eu besoin du mini-grep-multilingue, ce qui n'est pas
mon
cas, toutefois on trouvera une
application de cette commande par ma pomme dans le "test
d'encodage" au rayon Epaves]
Pour plus d'informations sur les commandes en bash : un tutoriel très clair.
Le
script !
[Nota : nous conservons le code couleur de Notepad++,
très lisible :
- commentaires : ##Commentaire blablabla
- commandes : echo
- variables : $fichiertableau
- valeur des incrémentations : 1]
Télécharger le script (sans les commentaires).
#!/bin/bash ## NB : Ce script s'exécute à partir du sommet de l'arborescence de fichiers (projet_Master1) echo "Quel nom de fichier donner au tableau ?"; ## L'utilisateur entre le nom à donner au tableau read fichiertableau ; ## A ce tableau est associée la variable $fichiertableau ## Création du tableau html et de ses des deux premières lignes dans le fichier echo "<html><head><title>Tableau de resultats</title></head><body><table border=1>" > $fichiertableau; echo "<TR><TH colspan =4><big>Français</big></TH><TH colspan =4><big>Japonais</big></TH></TR> <TR><TH>lien externe</TH><TH>lien local</TH><TH>texte</TH><TH>contexte</TH><TH>lien externe</TH><TH>lien local</TH><TH>texte</TH><TH>contexte</TH></TR>" >> $fichiertableau; echo "Quel est le nom du dossier contenant les fichiers d'URL?"; ## L'utilisateur entre le nom du répertoire contenant les fichiers d'URL read dossier ; ## A ce répertoire est associée la variable $dossier #Création d'un compteur pour les différents sens (cad les 5 fichiers texte contenant les listes d'URL), incrémenté à 1 i=1 # Pour chaque fichier trouvé dans le répertoire : for fichierURL in `ls $dossier` { ## Si c'est un fichier texte qui porte le nom "sens1,2,3,etc." case "$fichierURL" in "sens$i.txt") ## Créer une case " sens1,2,3..." dans le tableau html echo "<TR bgcolor=\"#CCCC99\"><TD colspan=8 align=center><b>sens$i</b></TD></TR>" >> $fichiertableau ## Création d'un compteur qui va numéroter chaque ligne du fichier (il servira à nommer les fichiers créés à partir de chaque URL) ## NB : les URL françaises porteront des chiffres impairs, les URL japonaises des chiffres pairs j=1 #Création du compteur langue qui va servir à discriminer le français et le japonais (1=francais, 2= japonais) cptlg=1 for ligne in `cat ./$dossier/$fichierURL` ## Pour chaque ligne trouvée dans le fichier : { ## Si le compteur $cptlg a la valeur 2 (ce n'est pas le cas au premier tour de boucle : on passe à la seconde boucle if) if [ "$cptlg" -eq "2" ] then ## Création du lien vers l'URL pointée dans le tableau html echo "<TD align=center><a href=\"$ligne\">URL$j</a></TD>" >> $fichiertableau ## Au premier tour de la boucle for : création des suites de répertoires : pages_aspirees/JP/sens1 ; (dump/JP/sens1) ; JP/sens1 (dans le repertoire "contextes") ## A chaque nouveau tour de la boucle for : création de répertoires sens2, sens3, etc. mkdir -p ./pages_aspirees/JP/sens$i #mkdir -p ./dump/JP/sens$i mkdir -p ./contextes/JP/sens$i ## Aspiration de l'URL pointée par la variable $ligne en local, redirection du résultat dans un sous-rep du rep "pages_aspirees", sous un nom "chiffrepair.html" ## Création dans le tableau html du lien vers l'URL aspirée wget -O ./pages_aspirees/JP/sens$i/$j.html $ligne echo "<TD align=center><a href=\"../pages_aspirees/JP/sens$i/$j.html\">locale$j</a></TD>" >> $fichiertableau ## Théoriquement : dump du texte de la page aspirée (cette commande est passée en commentaire, [v. Bugs]) ## Création du lien dans le tableau html #lynx -dump ./pages_aspirees/JP/sens$i/$j.html > ./dump/JP/sens$i/$j.txt echo "<TD align=center><a href=\"../dump/JP/sens$i/$j.txt\">dump$j</a></TD>" >> $fichiertableau ## Lancement du mini-grep-multilingue : avec le codage UTF-8, sur le fichier dump qui vient d'être créé, à partir du motif japonais ## Copie du résultat dans un sous-rep du rep "contextes" avec un nouveau nom de fichier numéroté ## Création du lien dans le tableau html perl ./programmes/minigrep/mini-grep-multilingue.pl "UTF-8" ./dump/JP/sens$i/$j.txt ./contextes /motif_jp.txt cp resultat-extraction.html ./contextes/JP/sens$i/resultat-extraction$j.html echo "<TD align=center><a href=\"../contextes/JP/sens$i/resultat-extraction$j.html\">contexte$j </a></TD></TR>" >> $fichiertableau ## Incrémentation du compteur $cptlg à 3 ---> passage à la troisième boucle if cptlg=3 fi ## Si le compteur $cptlg a la valeur 1 : if [ "$cptlg" -eq "1" ] then ## Création du lien vers l'URL pointée dans le tableau html echo "<TR><TD align=center><a href=\"$ligne\">URL$j</a></TD>" >> $fichiertableau ## Au premier tour de la boucle for : création des suites de répertoires : pages_aspirees/FR/sens1 ; dump/FR/sens1 ; FR/sens1 (dans le repertoire "contextes") ## A chaque nouveau tour de la boucle for : création de répertoires sens2, sens3, etc. mkdir -p ./pages_aspirees/FR/sens$i mkdir -p ./dump/FR/sens$i mkdir -p ./contextes/FR/sens$i ## Aspiration de l'URL pointée par la variable $ligne en local, redirection du résultat dans un sous-rep du rep "pages_aspirees", sous un nom "chiffreimpair.html" ## Création dans le tableau html du lien vers l'URL aspirée wget -O ./pages_aspirees/FR/sens$i/$j.html $ligne echo "<TD align=center><a href=\"../pages_aspirees/FR/sens$i/$j.html\">locale$j</a></TD>" >> $fichiertableau ## Dump du texte de la page page aspirée, redirection du résultat dans un sous-rep du rep "dump", sous un nom "chiffreimpair.txt" ## Création dans le tableau html du lien vers le fichier texte lynx -dump ./pages_aspirees/FR/sens$i/$j.html > ./dump/FR/sens$i/$j.txt echo "<TD align=center><a href=\"../dump/FR/sens$i/$j.txt\">dump$j</a></TD>" >> $fichiertableau ## Lancement du script mini-grep-multilingue : avec le codage ISO-8859-1, sur le fichier dump qui vient d'être créé, à partir du motif français ## Copie du résultat dans un sous-rep du rep "contextes" avec un nouveau nom de fichier numéroté ## Création du lien dans le tableau html perl ./programmes/minigrep/mini-grep-multilingue.pl "ISO-8859-1" ./dump/FR/sens$i/$j.txt ./contextes/motif_fr.txt cp resultat-extraction.html ./contextes/FR/sens$i/resultat-extraction$j.html echo "<TD align=center><a href=\"../contextes/FR/sens$i/resultat-extraction$j.html\">contexte$j </a></TD>" >> $fichiertableau ## Incrémentation du compteur langue : 2 ---> passage à la première boucle if let "cptlg+=1" fi let "j+=1" ## Si $cptlg a la valeur 3 if [ "$cptlg" -eq "3" ] ## Réincrémentation du compteur $cptlg à 1 ---> passage à l'URL française suivante then cptlg=1 fi } let "i+=1" ## Incrémentation du compteur des sens ---> passage au fichier d'URL suivant ;; esac } ## Fermeture du tableau et du fichier html echo "</table></body></html>" >> $fichiertableau ; |