Script de création de tableaux

#!/usr/bin/env bash

#===============================================================================
# Ce programme prend deux arguments:
# -le nom du fichier d'urls
# -le nom_du_tableau.html
# le mot/l'expression régulière est à modifier dans le script
# exemple d'utilisation du script: bash tableau.sh urls_fr tableau_fr.html
# ceci produira un tableau avec les urls, un dump html, un dump texte, le contexte, le nombre d'occurences et les concordances
#===============================================================================

fichier_urls=$1 # le fichier d'URL en entrée
fichier_tableau=$2 # le fichier HTML en sortie

if [[ $# -ne 2 ]]
then
    echo "Ce programme demande exactement deux arguments."
    exit
fi

mot="mot" # à modifier espagnol: "[Aa]mas? de casa" | français:"[Ff]emmes? au foyer" | anglais "[Hh]ousewiv?f?es?"| chinois "家庭主妇"

echo $fichier_urls;
basename=$(basename -s .txt $fichier_urls)

echo "<html><body>" > $fichier_tableau
echo "<h2>Tableau $basename :</h2>" >> $fichier_tableau
echo "<br/>" >> $fichier_tableau
echo "<table>" >> $fichier_tableau
echo "<tr><th>ligne</th><th>code</th><th>URL</th><th>encodage</th><th>dump html</th><th>dump text</th><th>occurrences</th><th>contextes</th><th>concordances</th></tr>" >> $fichier_tableau

lineno=1;
while read -r URL; do
    echo -e "\tURL : $URL";
    # la façon attendue, sans l'option -w de cURL
    code=$(curl -ILs $URL | grep -e "^HTTP/" | grep -Eo "[0-9]{3}" | tail -n 1)
    charset=$(curl -Ls $URL -D - -o "./aspirations/$basename-$lineno.html" | grep -Eo "charset=(\w|-)+" | cut -d= -f2)

    # autre façon, avec l'option -w de cURL
    # code=$(curl -Ls -o /dev/null -w "%{http_code}" $URL)
    # charset=$(curl -ILs -o /dev/null -w "%{content_type}" $URL | grep -Eo "charset=(\w|-)+" | cut -d= -f2)

    echo -e "\tcode : $code";

    if [[ ! $charset ]]
    then
        echo -e "\tencodage non détecté, on prendra UTF-8 par défaut.";
        charset="UTF-8";
    else
        echo -e "\tencodage : $charset";
    fi

    if [[ $code -eq 200 ]]
    then
        dump=$(lynx -dump -nolist -assume_charset=$charset -display_charset=$charset $URL)
        if [[ $charset -ne "UTF-8" && -n "$dump" ]]
        then
            dump=$(echo $dump | iconv -f $charset -t UTF-8//IGNORE)
        fi
    else
        echo -e "\tcode différent de 200 utilisation d'un dump vide"
        dump=""
        charset=""
    fi
  echo "$dump" > "./dumps-text/$basename-$lineno.txt"
  echo "./dumps-text/$basename-$lineno.txt"
 

  # compte du nombre d'occurrences
  NB_OCC=$(grep -E -o "[Ff]emmes? au foyer" ./dumps-text/$basename-$lineno.txt | wc -l)

  # extraction des contextes

  grep -E -A2 -B2 "[Ff]emmes? au foyer" ./dumps-text/$basename-$lineno.txt > ./contextes/$basename-$lineno.txt

  # construction des concordance avec une commande externe

  bash ./programmes/concordance.sh ./dumps-text/$basename-$lineno.txt "$mot" > ./concordances/$basename-$lineno.html

    echo "<tr><td>$lineno</td><td>$code</td><td><a href=\"$URL\">$URL</a></td><td>$charset</td><td><a href="./aspirations/$basename-$lineno.html">html</a></td><td><a href="./dumps-text/$basename-$lineno.txt">text</a></td><td>$NB_OCC</td><td><a href="./contextes/$basename-$lineno.txt">contextes</a></td><td><a href="./concordances/$basename-$lineno.html">concordance</a></td></tr>" >> $fichier_tableau
    echo -e "\t--------------------------------"
    lineno=$((lineno+1));
done < $fichier_urls
echo "</table>" >> $fichier_tableau
echo "</body></html>" >> $fichier_tableau



Script concordancier

#!/usr/bin/bash


fichier_text=$1
motif=$2

if [[ $# -ne 2 ]]
then
    echo "Ce programme demande exactement deux arguments."
    exit
fi

if [[ ! -f $fichier_text ]]
then
  echo "le fichier $fichier_text n'existe pas"
  exit
fi

if [[ -z $motif ]]
then
  echo "le motif est vide"
  exit
fi

echo "
<!DOCTYPE html>
<html lang=\"en\">
<head>
  <meta charset=\"UTF-8\">
  <title>Concordance</title>
</head>
<body>
<table>
<thead>
  <tr>
    <th class=\"has-text-right\">Contexte gauche</th>
    <th>Cible</th>
    <th class=\"has-text-left\">Contexte droit</th>
  </tr>
</thead>
<tbody>
"
##sur mac pour utiliser GUN grep il faut préfixer grep avec g
ggrep -P "\p{Han}{0,5}$motif(\p{Han}){0,5}" $fichier_text | sed -E "s/(.*)($motif)(.*)/<tr><td class="has-text-right">\1<\/td><td class="has-text-centre">\2<\/td><td class="has-text-left">\3<\/td><\/tr>/"

## pour l'anglais et l'espagnol on utilise: grep -E -o "\w{0,10}\b$motif\b(\W+\w+){0,10}" $fichier_text | sed -E "s/(.)($motif)(.)/<tr><td>\1<\/td><td>\2<\/td><td>\3<\/td><\/tr>/"

echo "
</tbody>
</table>
</body>
</html>
"