Advertisement
anthonimes

TP4---EXOS3-6

Nov 12th, 2020 (edited)
408
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.63 KB | None | 0 0
  1. # TP4 --- Exercice 5
  2. #!/bin/bash
  3. easier() {
  4.     # ^ : la chaîne doit se trouver en début de ligne
  5.     # $ : la chaîne doit se terminer à cet endroit
  6.     debut=$( grep -n "^### BEGIN $2$" $1 | cut -d":" -f1 )
  7.     debut=$((debut+1))
  8.     fin=$( grep -n "^### END $2" $1 | cut -d":" -f1 )
  9.     fin=$((fin-1))
  10.     head -n $fin $1 | tail -n +$debut | cut -c 3-
  11. }
  12.  
  13. easier $1 $2
  14. extrait() {
  15.     lecture=0
  16.     while read ligne; do
  17.         if [ "$ligne" = "### BEGIN $2" ]; then
  18.             lecture=1
  19.         fi
  20.         if [ $lecture -eq 1 ]; then
  21.             echo "$ligne" | cut -c 3-
  22.         fi
  23.         if [ "$ligne" = "### END $2" ]; then
  24.             lecture=0
  25.         fi
  26.     done < $1
  27. }
  28.  
  29. extrait $1 $2 > $2
  30.  
  31. # TP4 --- Exercice 6
  32. # correction plus "simple"
  33. oneliner() {
  34.     for nom in $(ls "$1"); do
  35.         # rappel des options de sort : -n permet de trier selon l'ordre des réels, -k
  36.         # permet de délimiter le champ (ici, 2, les notes) et -t le délimiteur (ici ;)
  37.         noteMin=$( sort -rn -k2 -t";" "$1/$nom" | tail -n 1 | cut -d";" -f2)
  38.         noteMax=$( sort -rn -k2 -t";" "$1/$nom" | head -n 1 | cut -d";" -f2)
  39.         echo $nom "note max = "$noteMax "note min = "$noteMin
  40.     done
  41. }
  42.  
  43. #!/bin/bash
  44. minMax() {
  45. #  Attention : protection des noms de fichiers avec "" pour gérer les espaces
  46.     nbLignes=$( wc -l < "$1")
  47.     ligne=$(cat "$1" | head -n 1 | tail -n 1)
  48.     noteMax=$( echo $ligne | cut -d ';' -f2)
  49.     noteMin=$noteMax
  50.     for i in $( seq 2 $nbLignes); do
  51.         ligne=$(cat "$1" | head -n $i | tail -n 1)
  52.         note=$( echo $ligne | cut -d ';' -f2)
  53.         # rappel : obligation d'utiliser bc pour manipuler des valeurs non entières
  54.         # la valeur de retour est 1 si la comparaison est vraie, 0 sinon
  55.         if [ $(echo "$note > $noteMax" | bc) -eq 1 ]; then
  56.         # pour des valeurs entières
  57.         #if [ $note -gt $noteMax ]; then
  58.             noteMax=$note
  59.         elif [ $(echo "$note < $noteMin" | bc) -eq 1 ]; then
  60.         # pour des valeurs entières
  61.         # elif [ $note -lt $noteMin ]; then
  62.             noteMin=$note
  63.         fi
  64.     done
  65.     echo $nom "note max = "$noteMax "note min = "$noteMin
  66. }
  67.  
  68. for nom in $(ls "$1");do
  69.     # est que $nom est bien un fichier ?
  70.     if [ -f "$1/$nom" ]; then
  71.         minMax "$1/$nom"
  72.     fi
  73. done
  74.  
  75. maxEtud() {
  76.     max=0
  77.     nomMax=""
  78.     for nom in $( ls "$1"); do
  79.         # $f est-il un fichier régulier ?
  80.         if [ -f "$1/$nom" ]; then
  81.             #nbLignes=$( cat "$1/$nom" | wc - l)
  82.             nbLignes=$( wc -l < "$1/$nom")
  83.             if [ $nbLignes -gt $max ]; then
  84.                 max=$nbLignes
  85.                 nomMax=$nom
  86.         fi
  87.         fi
  88.     done
  89.     # pour afficher *proprement* le nom du module, il faudrait enlever le ".csv"
  90.     echo $nomMax
  91. }
  92.  
  93. maxEtud $1
  94.  
  95. # TP4 --- Exercice 4
  96. #!/bin/bash
  97. tatin() {
  98.     while read ligne ; do
  99.         # nombre de mots de la ligne
  100.         miroir=""
  101.         # attention : montrer un exemple avec " " autour de $ligne
  102.         for mot in $ligne; do
  103.             miroir="$mot $miroir"
  104.         done
  105.         echo "$miroir"
  106.     done
  107. }
  108.  
  109. if [ $# -eq 1 ] ; then
  110.     tatin < "$1"
  111. else
  112.     tatin
  113. fi
  114.  
  115. # TP4 --- Exercice 3
  116.  
  117. # la version one-liner
  118. #!/bin/bash
  119. if [ $# -ne 1 ]; then
  120.     echo "Usage : bash $0 nom_fichier"
  121.     exit 1
  122. fi
  123. nombre_doublons=$(sort $1 | uniq -c | sort -rn | head -n 1 | tr -s " " | cut -d" " -f2,3)
  124. #mot_doublon=$(sort $1 | uniq -c | sort -rn | head -n 1 | tr -s " " | cut -d" " -f3)
  125.  
  126. if [ $(echo "$nombre_doublons" | cut -c1) -eq 1 ]; then
  127.     echo "Aucun doublon dans le fichier"
  128. else
  129.     echo "Doublon détecté : $nombre_doublons"
  130. fi
  131.  
  132. # en utilisant des fonctions (cf slide 10 CM scripts)
  133. #!/bin/bash
  134. chercher_ligne() {
  135.     # compte et retourne le nb d’occurrences d’un mot dans un fichier
  136.     # $2 est le fichier et $1 le mot à chercher
  137.     n=0
  138.     nbl=$( cat $2 | wc -l )
  139.     for i in $( seq $nbl); do
  140.         ligne=$( cat $2 | head -n $i | tail -n 1)
  141.         if [ "$ligne" = "$1" ]; then
  142.             n=$((n+1))
  143.         fi
  144.     done
  145.     return $n
  146. }
  147.  
  148. chercher_max() {
  149.     # cherche le mot avec le nb d’occurrences maximal
  150.     # retourne le 1er n°de ligne d’apparition du mot
  151.     taille=$( cat $1 | wc -l )
  152.     ligneMax=$( cat $1 | head -n 1 | tail -n 1)
  153.     chercher_ligne $ligneMax $1
  154.     # $? contient le résultat retourné par chercher_ligne
  155.     max=$?
  156.     for i in $( seq 2 $taille); do
  157.         ligne=$( cat $1 | head -n $i | tail -n 1)
  158.         chercher_ligne $ligne $1
  159.         n=$?
  160.         # -lt ===
  161.         if [ "$max" -lt "$n" ]; then
  162.             max=$n
  163.             ligneMax=$ligne
  164.         fi
  165.     done
  166.     echo "$max/$ligneMax"
  167. }
  168.  
  169. chercher_max $1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement