Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # TP4 --- Exercice 5
- #!/bin/bash
- easier() {
- # ^ : la chaîne doit se trouver en début de ligne
- # $ : la chaîne doit se terminer à cet endroit
- debut=$( grep -n "^### BEGIN $2$" $1 | cut -d":" -f1 )
- debut=$((debut+1))
- fin=$( grep -n "^### END $2" $1 | cut -d":" -f1 )
- fin=$((fin-1))
- head -n $fin $1 | tail -n +$debut | cut -c 3-
- }
- easier $1 $2
- extrait() {
- lecture=0
- while read ligne; do
- if [ "$ligne" = "### BEGIN $2" ]; then
- lecture=1
- fi
- if [ $lecture -eq 1 ]; then
- echo "$ligne" | cut -c 3-
- fi
- if [ "$ligne" = "### END $2" ]; then
- lecture=0
- fi
- done < $1
- }
- extrait $1 $2 > $2
- # TP4 --- Exercice 6
- # correction plus "simple"
- oneliner() {
- for nom in $(ls "$1"); do
- # rappel des options de sort : -n permet de trier selon l'ordre des réels, -k
- # permet de délimiter le champ (ici, 2, les notes) et -t le délimiteur (ici ;)
- noteMin=$( sort -rn -k2 -t";" "$1/$nom" | tail -n 1 | cut -d";" -f2)
- noteMax=$( sort -rn -k2 -t";" "$1/$nom" | head -n 1 | cut -d";" -f2)
- echo $nom "note max = "$noteMax "note min = "$noteMin
- done
- }
- #!/bin/bash
- minMax() {
- # Attention : protection des noms de fichiers avec "" pour gérer les espaces
- nbLignes=$( wc -l < "$1")
- ligne=$(cat "$1" | head -n 1 | tail -n 1)
- noteMax=$( echo $ligne | cut -d ';' -f2)
- noteMin=$noteMax
- for i in $( seq 2 $nbLignes); do
- ligne=$(cat "$1" | head -n $i | tail -n 1)
- note=$( echo $ligne | cut -d ';' -f2)
- # rappel : obligation d'utiliser bc pour manipuler des valeurs non entières
- # la valeur de retour est 1 si la comparaison est vraie, 0 sinon
- if [ $(echo "$note > $noteMax" | bc) -eq 1 ]; then
- # pour des valeurs entières
- #if [ $note -gt $noteMax ]; then
- noteMax=$note
- elif [ $(echo "$note < $noteMin" | bc) -eq 1 ]; then
- # pour des valeurs entières
- # elif [ $note -lt $noteMin ]; then
- noteMin=$note
- fi
- done
- echo $nom "note max = "$noteMax "note min = "$noteMin
- }
- for nom in $(ls "$1");do
- # est que $nom est bien un fichier ?
- if [ -f "$1/$nom" ]; then
- minMax "$1/$nom"
- fi
- done
- maxEtud() {
- max=0
- nomMax=""
- for nom in $( ls "$1"); do
- # $f est-il un fichier régulier ?
- if [ -f "$1/$nom" ]; then
- #nbLignes=$( cat "$1/$nom" | wc - l)
- nbLignes=$( wc -l < "$1/$nom")
- if [ $nbLignes -gt $max ]; then
- max=$nbLignes
- nomMax=$nom
- fi
- fi
- done
- # pour afficher *proprement* le nom du module, il faudrait enlever le ".csv"
- echo $nomMax
- }
- maxEtud $1
- # TP4 --- Exercice 4
- #!/bin/bash
- tatin() {
- while read ligne ; do
- # nombre de mots de la ligne
- miroir=""
- # attention : montrer un exemple avec " " autour de $ligne
- for mot in $ligne; do
- miroir="$mot $miroir"
- done
- echo "$miroir"
- done
- }
- if [ $# -eq 1 ] ; then
- tatin < "$1"
- else
- tatin
- fi
- # TP4 --- Exercice 3
- # la version one-liner
- #!/bin/bash
- if [ $# -ne 1 ]; then
- echo "Usage : bash $0 nom_fichier"
- exit 1
- fi
- nombre_doublons=$(sort $1 | uniq -c | sort -rn | head -n 1 | tr -s " " | cut -d" " -f2,3)
- #mot_doublon=$(sort $1 | uniq -c | sort -rn | head -n 1 | tr -s " " | cut -d" " -f3)
- if [ $(echo "$nombre_doublons" | cut -c1) -eq 1 ]; then
- echo "Aucun doublon dans le fichier"
- else
- echo "Doublon détecté : $nombre_doublons"
- fi
- # en utilisant des fonctions (cf slide 10 CM scripts)
- #!/bin/bash
- chercher_ligne() {
- # compte et retourne le nb d’occurrences d’un mot dans un fichier
- # $2 est le fichier et $1 le mot à chercher
- n=0
- nbl=$( cat $2 | wc -l )
- for i in $( seq $nbl); do
- ligne=$( cat $2 | head -n $i | tail -n 1)
- if [ "$ligne" = "$1" ]; then
- n=$((n+1))
- fi
- done
- return $n
- }
- chercher_max() {
- # cherche le mot avec le nb d’occurrences maximal
- # retourne le 1er n°de ligne d’apparition du mot
- taille=$( cat $1 | wc -l )
- ligneMax=$( cat $1 | head -n 1 | tail -n 1)
- chercher_ligne $ligneMax $1
- # $? contient le résultat retourné par chercher_ligne
- max=$?
- for i in $( seq 2 $taille); do
- ligne=$( cat $1 | head -n $i | tail -n 1)
- chercher_ligne $ligne $1
- n=$?
- # -lt ===
- if [ "$max" -lt "$n" ]; then
- max=$n
- ligneMax=$ligne
- fi
- done
- echo "$max/$ligneMax"
- }
- chercher_max $1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement