Le script

Téléchargement du script ICI

Téléchargement du fichier contenant les URL ICI


Pour une meilleure lisibilité, les commentaires sont en vert, les commandes en bleu, et les variables en orange.

##### SCRIPT TABLEAU FINAL A CINQ COLONNES ##### 
#!usr/bin/bash     
#En-tête propre à un script Bash
##création des répertoires pour le stockage des données créees ## 
mkdir pagesaspirees;
mkdir contexte;
mkdir dump;

##données saisies par l'utilisateur ##
echo "Pouvez-vous indiquer le dossier où se trouvent les fichiers d'URL? "; 

#retient le nom du répertoire rentré par l'utilisateur sous la variable repertoireURL
#attention, on doit toujours se placer dans le répertoire qui le contient : C'EST NOTRE REPERTOIRE DE TRAVAIL
read repertoireURL;
  
#retient le nom donné pour le fichier de sortie par l'utilisateur sous la variable fichiertableau 
echo "Quel nom veux-tu donner à ton tableau ?"; 
read fichiertableau ; 

## début du fichier html qui sera notre fichier de sortie ##
echo "<html><head><title>Sens et traductions anglaises du mot PISTE</title></head><body>">>$fichiertableau;

###############  boucle qui va nous permettre de regarder tous les dossiers contenus dans le répertoire de travail ###############
#( d'après notre choix de rangement, les dossiers correspondent à chaque sens de piste, on en aura donc 7)
for dossier in `ls $repertoireURL` 
do

# création dans chaque répertoire (crée en début de script) de sous-dossiers : on en crée un pour chaque sens
# la première boucle nous a permis d'instaurer une variable dossier qui prend comme valeur le nom des 7 dossiers :
# la variable change de valeur à chaque retour en début de la boucle
# on utilise donc cette variable pour nommer de la même façon les nouveaux dossiers crées	
mkdir pagesaspirees/$dossier; 
mkdir dump/$dossier; 
mkdir contexte/$dossier; 

# début du tableau html dans le fichier html de sortie 
# on choisit de le créer en bleu et avec une  bordure 4 pixels 
echo "<table width=90% border = "4" bordercolor = "blue">">>$fichiertableau;

# on affiche dans la première ligne (cellules fusionnées sur toute la largeur du tableau) le sens que l'on va traiter
echo "<p><TR><TD colspan=10 align=center><STRONG><FONT SIZE=7><FONT COLOR="indigo">Dans le domaine : $dossier</FONT></STRONG></TD></TR>">>$fichiertableau;

###############  boucle imbriquee qui va nous permettre de regarder tous les fichiers contenus dans chaque dossier ###############
#( d'après notre choix de rangement, les fichiers correspondent aux deux langues : anglais et francais)
for fichier in `ls $repertoireURL/$dossier`
do 

#on veut créer une première colonne qui serait fusionnée pour toutes les URL's d'une même langue
#on met en place un compteur qui nous permettra de calculer le nombre de ligne du document afin de savoir combien on doit fusionner de ligne pour la première colonne 
#on le commence à 1 car on a déjà créé une ligne pour le sens observé
compteurtotal=1;

#pour avoir le nombre de ligne, on met en place une boucle for, qui regarde chaque ligne
#on leur applique une condition qui fait que si la ligne commence par un h, alors on incrémente le compteur.
for ligne in `cat $repertoireURL/$dossier/$fichier`
do
if echo "$ligne" | egrep -q "^h" 
then 
let "compteurtotal +=1";
fi
done

#cela fait, on revient à notre boucle for qui regarde les fichiers anglais et francais.
#pour notre tableau, on veut récupérer le nom du fichier (c'est à dire anglais ou francais) afin de réaliser la première colonne
#mais la variable crée par la boucle for comporte l'extension .txt
#on crée donc une nouvelle variable qui ne contient pas l'extension		
nomfic=`basename $fichier .txt`

#on peut donc maintenant écrire dans notre fichier html de sortie la première colonne :
#on utilisera rowspan pour fusionner le nombre de lignes (connu grâce au compteur) voulu.		
echo "<TR><TD width=10% rowspan=$compteurtotal align=center><FONT SIZE=7><FONT COLOR=\"mediumaquamarine\">$nomfic</FONT></TD></TR><TR>">>$fichiertableau;

#création pour chaque dossier sens, un sous-dossier anglais ou francais. Pour cela, on réutilise notre variable crée (sans extension)	
mkdir pagesaspirees/$dossier/$nomfic 
mkdir dump/$dossier/$nomfic
mkdir contexte/$dossier/$nomfic

#on met en place un deuxième compteur, qui lui va nous permettre de compter les URL's de chaque fichier
#on iniatilise le compteur à 0 cette fois.
compteur=0 

############## nouvelle boucle qui va nous permettre de regarder de plus près chaque ligne des fichiers et de travailler dessus  ###############
for ligne in `cat $repertoireURL/$dossier/$fichier` 

#parcours chaque ligne des document en .txt dans les dossiers en effectuant les opérations qui suivent
do
#nos fichiers sont composés de deux types de ligne : 
#on a une ligne commençant par un '#' et qui nous indique le mot contenu dans les URL's qui suivent (soit piste pour le francais, soit sa traduction anglaise) 			
#on va donc commencer par demander au programme de ne pas faire la même chose suivant la ligne qu'il regarde : condition boucle if
#si la ligne commence par un '#'
if echo "$ligne" | egrep -q "#"
then

#on veut récupérer une variable qui serait le mot qui suit le dièse
#pour cela, on écrit la ligne dans un autre fichier,
#et on lui retire le dièse, et les éventuels tirets qui permettaient de traiter les noms composés comme une seule ligne.
#puis on efface ce fichier.		
echo "$ligne" > changement.txt
traduction=`perl -pe "s/#//g" changement.txt | perl -pe "s/-/ /g" `
rm changement.txt

#sinon, c'est que c'est une URL, et dans ce cas, le traitement commence vraiment
else

#on met donc en place le compteur		
let "compteur += 1" 

#et on écrit l'adresse de l'URL dans une première cellule
#la balise <a ref> nous permet de créer un lien
echo "<TD width=10% ><a href="$ligne">URL $compteur<</a></TD>">>$fichiertableau

# à nouveau, deux possibilités : soit l'URL est bien en HTML, soit c'est un PDF, dans quel cas, le traitement est un peu particulier :
if echo "$ligne" | egrep -q "\.pdf"
then

#on aspire la page et on la stocke sous le nom URL+chiffre_du_compteur, mais en .pdf pour qu'elle soit lisible
wget -t 2 $ligne -O pagesaspirees/$dossier/$nomfic/URL_$compteur.pdf 

#on remplit ainsi une nouvelle cellule du tableau final de la même façon que précédemment
echo "<TD width=10%><a href="./pagesaspirees/$dossier/$nomfic/URL_$compteur.pdf">Page $compteur</a></TD>" >> $fichiertableau; #affiche la page aspirée dans la deuxième colonne du tableau et la rend cliquable, puis ferme le tableau

#par contre, on sait qu'un format PDF ne pourra être transformé en .txt, le traitement ne peut donc continuer pour cette page, 
#on l'indique donc dans notre tableau, sur les deux cellules justifiées prévues pour le dump et le contexte.
echo "<TD colspan = 2> <<blockquote><p align=\"justify\"><FONT SIZE=2>Il s'agit d'un fichier en pdf, on ne peut donc pas récupérer le texte de la page aspirée.</FONT></p></blockquote></TD></TR>" >> $fichiertableau

#si l'url est bien en HTML, alors par contre, on pourra tout traiter :		
else

#on aspire la page et on la stocke sous le nom URL+chiffre_du_compteur, mais bien en .html cette fois
wget -t 2 $ligne -O pagesaspirees/$dossier/$nomfic/URL_$compteur.html 

# on crée une nouvelle variable, qui va nous permettre de vérifier que l'aspiration a bien fonctionné :
#pour cela, on regarde tout simplement la taille du fichier obtenu, s'il est égal à 0, alors c'est que c'est un échec
tailleaspir=`ls -s ./pagesaspirees/$dossier/$nomfic/URL_$compteur.html`
if echo "$tailleaspir" | egrep -q "^0" 
then
echo "<TD colspan = 3> <<blockquote><p align=\"justify\"><FONT SIZE=2>La page n'a pas pu être aspirée : problème de connexion ou lien mort.</FONT></p></blockquote></TD></TR>" >> $fichiertableau
else

#si c'est une réussite, alors on continue :
#on inscrit ce premier résultat dans la cellule concernée, avec toujours un lien
echo "<TD width=10%><a href="./pagesaspirees/$dossier/$nomfic/URL_$compteur.html">Page $compteur</a></TD>" >> $fichiertableau; #affiche la page aspirée dans la deuxième colonne du tableau et la rend cliquable, puis ferme le tableau

#puis on dumpe la page, c'est à dire que l'on récupère le texte brut :						
lynx -dump -nolist ./pagesaspirees/$dossier/$nomfic/URL_$compteur.html > ./dump/$dossier/$nomfic/dump_$compteur.txt  			
#c'est notre deuxième résultat, et on l'inscrit dans la cellule qui suit, dans notre tableau
echo "<TD width=10%><a href="./dump/$dossier/$nomfic/dump_$compteur.txt ">DUMP_$compteur</a></TD>" >> $fichiertableau

#enfin, on va récupérer le contexte autour de la variable traduction 
#pour cela, on récupère la ligne au dessus et deux en dessous dans lesquelles on trouve le mot cherché
#et tout de suite, on lui applique des balises de couleur afin qu'il apparaisse dans le tableau html en rouge (et qu'il soit bien repérable) 				
egrep  -A1 -B2 -i "(^|\.|,|;| )$traduction(s| |\.|;|,|$)" ./dump/$dossier/$nomfic/dump_$compteur.txt | perl -pe "s/((^|[^a-zA-Z0-9-]))$traduction(s?)([^a-z])/\1<FONT COLOR=red>$traduction\3<\/FONT>\4/ig" > ./contexte/$dossier/$nomfic/contexte_$compteur.txt	

#on vérifie que le mot voulu a bien été trouvé, en retestant la taille du fichier obtenu,
tailleaspir2=`ls -s ./contexte/$dossier/$nomfic/contexte_$compteur.txt`
#si c'est un échec, on inscrit dans le tableau que la page a été mise à jour et ne contient plus le mot recherché.						
if echo "$tailleaspir2" | egrep -q "^0" 
then
echo "<TD width=60%><blockquote><p align=\"justify\"><FONT SIZE=2>La page a été mise à jour et ne contient plus "$traduction"</FONT></p></blockquote></TD></TR>" >> $fichiertableau
else

#si c'est une réussite, on l'inscrit également :
#pour que le contexte apparaisse directement dans le tableau, on crée une dernière variable à laquelle on associe l'opération cat.
contexte2=`cat ./contexte/$dossier/$nomfic/contexte_$compteur.txt`
echo "<TD width=60%><blockquote><p align=\"justify\"><FONT SIZE=2>$contexte2</FONT></p></blockquote></TD></TR>" >> $fichiertableau

#on ferme toutes les boucles if			
fi fi fi fi

#on ferme les boucles for
done done

#fin du document html		
echo "</table></body></html><p>" >> $fichiertableau ;
done 


Pour le bon affichage de cette page, il est préférable d'utiliser
Mozilla Firefox

Haut de page