Travaux pratiques: filtrage des données

Sommaire

Index

Introduction

Cette séance de TP consiste à effectuer un travail consistant à récupérer des informations générées par un équipement réseau et à en extraire des données pour diagnostiquer une panne.

Contexte

Vous travaillez comme technicien dans une entreprise qui gère des équipements réseaux et des serveurs. Dans votre service, vous devez régulièrement diagnostiquer des pannes sur des routeurs.

Pour cela, vous pouvez effectuer une connexion SSH vers ce routeur et lancer une commande.

Il y a trois types de routeurs différents présents sur l’infrastructure que votre service gère:

Selon le routeur, les commandes à exécuter changent, ainsi que la sortie générée.

Besoin

Écrire un script qui facilite le travail du technicien en n’affichant que certaines lignes et/ou colonnes.

Données techniques

Équipement Huawei

La commande pour visualiser les caractéristiques des ports est showport

Voici une sortie simplifiée pour un équipement Huawei:

----------------------------------------------------------------------
| Port        | Data-2   | Data-3   | Data-4   | Data-5   | Data-6   |
----------------------------------------------------------------------
| 00/11/22/02 | 22       | 23       | 24       | 25       | 26       |        
| 00/11/22/03 | 32       | 33       | 34       | 35       | 36       |        
| 00/11/22/04 | 42       | 43       | 64       | 45       | 46       |        
| 00/11/22/05 | 52       | 53       | 54       | 55       | 56       |        
| 00/11/22/06 | 62       | 63       | 64       | 65       | 66       |        
| 00/11/22/07 | 72       | 73       | 74       | 75       | 76       |        
| 00/11/22/08 | 82       | 83       | 84       | 85       | 86       |        
| 00/11/22/09 | 92       | 93       | 94       | 95       | 96       |        
----------------------------------------------------------------------

Équipement Nokia

La commande pour visualiser les caractéristiques des ports est portinfo

Voici une sortie simplifiée pour un équipement Nokia:

| Port_ID     | Data_2   | Data_3   | Data_4   | Data_5   | Data_6   |
| 00/11/22/02 | 22       | 23       | 24       | 25       | 26       |
| 00/11/22/03 | 32       | 33       | 34       | 35       | 36       |
| 00/11/22/04 | 42       | 43       | 64       | 45       | 46       |
| 00/11/22/05 | 52       | 53       | 54       | 55       | 56       |
| 00/11/22/06 | 62       | 63       | 64       | 65       | 66       |
| 00/11/22/07 | 72       | 73       | 74       | 75       | 76       |
| 00/11/22/08 | 82       | 83       | 84       | 85       | 86       |
| 00/11/22/09 | 92       | 93       | 94       | 95       | 96       |

Équipement Edge

La commande pour visualiser les caractéristiques des ports est portdata

Voici une sortie simplifiée pour un équipement Edge:

Port          Data2      Data3     Data4       Data5      Data6   
00/11/22/02   22         23         24         25         26
00/11/22/03   32         33         34         35         36
00/11/22/04   42         43         64         45         46
00/11/22/05   52         53         54         55         56
00/11/22/06   62         63         64         65         66
00/11/22/07   72         73         74         75         76
00/11/22/08   82         83         84         85         86
00/11/22/09   92         93         94         95         96

Affichage de l’aide

Exemple de commande à ajouter dans un script pour afficher l’aide:

cat <<EOF
Ceci est l'aide du script nommé $0

Ici, \$0 est utilisé pour donné le nom du script en cours d'exécution

Dans l'aide on indique l'effet des paramètres

Par exemple:

-h --help
        Affiche l'aide

-o FICHIER --output FICHIER
        Fait quelque chose avec le fichier nommé FICHIER

EOF

Travail à réaliser

Les fichiers sont à placer dans votre dépôt GitHub dans un nouveau dossier nommé filtrage-donnees.

Filtrage par position des lignes

On considère un fichier nommé lignes.txt qui contient les lignes suivantes:

1
2
3
4
5

Pour afficher les trois premières lignes, la commande suivante est utilisée:

$ cat lignes.txt | head -3
1
2
3

Pour afficher les trois dernières lignes, la commande suivante est utilisée:

$ cat lignes.txt | tail -3
3
4
5

Pour afficher uniquement la troisième ligne, on combine ces commandes:

$ cat lignes.txt | head -3 | tail -1
3

Script afficherlignes

Écrire un script afficherlignes qui prend en paramètres les éléments suivants:

Ce script nommé compte:

#!/bin/bash
wc -l

Appelé ainsi:

cat /etc/passwd | ./compte

Affichera le nombre de lignes dans /etc/passwd

S’inspirer de ce script pour réaliser le travail demandé.

Filtrage par colonne et contenu

Le script filtrerports suivant est incomplet.

Vous devez le modifier pour qu’il récupère les paramètres qui lui sont passés et pour les faire passer à la commande awk donnée en fin de script.

#!/bin/bash

# Ajouter ici la gestion des paramètres
# En remplaçant les deux lignes ci-dessous
numeroport=00/11/22/05
titrecolonne=Data5

./getportinfo 192.168.4.2 | awk -v port=$numeroport -v colonne=$titrecolonne -v lignetitre=1 '

NR == lignetitre {
    for (i = 1 ; i <= NF ; i++) {
        if ($i == colonne) {
            index_colonne=i
        }
    }
}

$1 == port {print $index_colonne}
'

Le script getportinfo qui permet de simuler les données envoyées par un routeur est le suivant (il doit être exécutable):

#!/bin/bash

case "$1" in

    192.168.0.*)
        cat <<EOF
---------------------------------------------------------------------------
| Port        | Data-2    | Data-3    | Data-4    | Data-5    | Data-6    |
---------------------------------------------------------------------------
| 00/11/22/02 | 22        | 23        | 24        | 25        | 26        |
| 00/11/22/03 | 32        | 33        | 34        | 35        | 36        |
| 00/11/22/04 | 42        | 43        | 64        | 45        | 46        |
| 00/11/22/05 | 52        | 53        | 54        | 55        | 56        |
| 00/11/22/06 | 62        | 63        | 64        | 65        | 66        |
| 00/11/22/07 | 72        | 73        | 74        | 75        | 76        |
| 00/11/22/08 | 82        | 83        | 84        | 85        | 86        |
| 00/11/22/09 | 92        | 93        | 94        | 95        | 96        |
---------------------------------------------------------------------------
EOF
        ;;
    192.168.3.*)
        cat <<EOF
| Port_ID     | Data_2    | Data_3    | Data_4    | Data_5    | Data_6    |
| 00/11/22/02 | 22        | 23        | 24        | 25        | 26        |
| 00/11/22/03 | 32        | 33        | 34        | 35        | 36        |
| 00/11/22/04 | 42        | 43        | 64        | 45        | 46        |
| 00/11/22/05 | 52        | 53        | 54        | 55        | 56        |
| 00/11/22/06 | 62        | 63        | 64        | 65        | 66        |
| 00/11/22/07 | 72        | 73        | 74        | 75        | 76        |
| 00/11/22/08 | 82        | 83        | 84        | 85        | 86        |
| 00/11/22/09 | 92        | 93        | 94        | 95        | 96        |
EOF
        ;;
    192.168.4.*)
        cat <<EOF
Port          Data2      Data3     Data4       Data5      Data6
00/11/22/02   22         23         24         25         26
00/11/22/03   32         33         34         35         36
00/11/22/04   42         43         64         45         46
00/11/22/05   52         53         54         55         56
00/11/22/06   62         63         64         65         66
00/11/22/07   72         73         74         75         76
00/11/22/08   82         83         84         85         86
00/11/22/09   92         93         94         95         96
EOF
        ;;
    *)
        echo "Erreur: adresse inconnue" >&2
        exit 8
        ;;
esac

Il est à utiliser pour tester le script filtrerports

Travail à réaliser

  1. créer les deux scripts filtrerports et getportinfo et les placer dans le dossier filtrage-donnees
  2. À partir de ce dossier, exécuter filtrerports
  3. Modifier filtrerports pour qu’ils prennent les paramètres suivant en compte et les applique aux variables numeroport et titrecolonne: