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