Bonjour,
après 3 jours de recherches intensives, je ne trouve pas la solution de mon problème. J'ai un fichier .sh que j'exécute sur des fichiers .html. Ce premier recherche le nombre d'articles (écrits par des chercheurs) situés sur la page téléchargée en html. Chaque article est listé en commençant <LI>. Seulement, dans cette liste, il y a des sous-listes marquées par <UL> et </UL> au début et à la fin. Ma boucle qui doit les détecter repère bien les débuts de sous-liste, mais pas les fins. C'est comme si elle réinitialisait la valeur de la variable d'entrée dans une sous-liste.
Si qqn sait quel est le problème dans ma boucle, ça me serait d'une extrême aide !
Pour faire tourner ce fichier .sh sur le .html, j'utilise :
et le fichier qui sera créé s'appellera publis_short.csv
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cd /Users/nanana/Desktop/essai for u in `cat liste_url_short.txt`; do nomfic=`echo $u | awk -F '/' '{print $5}'`; wget $u; ./analyse_wp2_copie.sh $nomfic; done >publis_short.csv
Le problème, c'est qu'en allant sur la page web https://ideas.repec.org/e/paa6.html on voit bien que ce chercheur n'a publié que 34 articles. Le programme en compte 54. En fait, il ne compte pas le premier des sous-listes, mais il compte (à tort) les suivants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 #!/bin/bash # principe : # les articles commencent par <A NAME=articles><HR><H4>Articles<\/H4><OL> # et se terminent par </OL> # entre les 2 lignes, on compte les <LI>, mais il faut éliminer # les liste intermédiaires (uniquement des UL ?) # une ligne peut contenir 2 balises parmi les balises recherchées fic=$1 nbart=0 nbchp=0 nbbk=0 nbsft=0 in_art='' # in_art = 1 si on est dans le bloc Articles in_chp='' in_bk='' in_sft='' # in_liste_art = 1 si on est dans une sous liste article <UL> ....</UL> in_liste_art='' in_liste_chp='' in_liste_bk='' in_liste_sft='' auteur=`grep '<TITLE>' $fic |sed -e 's| <TITLE>||' -e 's| at IDEAS</TITLE>||'` idauteur=${fic%.*l} while read line do # articles if [ "$in_art" != "1" ] then in_art=`echo $line | awk '/id="articles-body"><ol>/ {print "1"}'` else in_liste_art=`echo $line | awk '/<UL>/ {print "1"}'` end_art=`echo $line | awk '/<\/ol><\/div><\/div>/ {print "1"}'` if [ "$end_art" != "1" ] then if [ "$in_liste_art" = "1" ] then end_liste=`echo $line | awk '/<\/UL>/ ~ $0 && /.*<UL>.*/ !~ $0 {print "1"}'` if [ "$end_liste" = "1" ] then in_liste_art='' fi fi if [ "$in_liste_art" != "1" ] then li_art=`echo $line | awk '/<LI class="downgate">/ || /<LI class="downnone">/ || /<LI class="downfree">/ {print "1"}'` if [ "$li_art" = "1" ] then nbart=`expr $nbart + 1` fi in_liste_art=`echo $line | awk '/<UL>/ {print "1"}'` fi else in_art='' fi fi done < $fic echo "$idauteur;$auteur;$nbart;$nbbk;$nbchp;$nbsft"
Merci beaucoup !
Cordialement
Partager