GNU/Linux >> Tutoriels Linux >  >> Linux

Travailler avec des colonnes - Awk et Sed ?

J'essaie d'analyser un fichier texte généré par un script expec qui
extrait certaines informations d'un commutateur.

Voici un exemple de sortie :

192      0000.0000.0000        1/g23      Dynamic              
192      0000.0000.0000        ch1        Dynamic              
192      0000.0000.0000        ch1        Dynamic              
192      0000.0000.0000        ch1        Dynamic

Le fichier texte contient beaucoup d'autres fichiers inutiles qui ne m'intéressent pas. Je ne veux que les lignes contenant le numéro de commutateur et le port - "1/g23" dans l'exemple ci-dessus.

J'ai fait un grep sur le fichier pour extraire les lignes qui contiennent le motif '/g'
et ça marche très bien.

Maintenant, tout ce que je veux, ce sont les deux colonnes du milieu.
J'ai utilisé awk pour imprimer les colonnes.

0000.0000.0000 1/g23

Maintenant que c'est fait, je veux me débarrasser du '.'
sed a bien fonctionné pour cela

000000000000 1/g23

À partir de là, je veux convertir uniquement la première colonne au format d'adresse MAC.

So this
000000000000 1/g23
Becomes this
00:00:00:00:00:00 1/g23

J'ai pu trouver une commande sed qui permettrait d'accomplir cela. Mais mon problème est que je n'ai besoin que de le faire sur la première colonne. Je ne sais pas trop comment je peux modifier une seule colonne et ne pas perdre l'association entre le MAC et le port.

grep -e "/g" switch6output | awk '{print $2,$3}' | sed 's/.//g' | sed 's/../&:/g;s/:$//'

Je suis sûr que c'est une façon vraiment stupide de le faire, mais c'était le mieux que je pouvais trouver. Existe-t-il un moyen plus fiable d'accomplir ce dont j'ai besoin sans perdre l'association MAC et port ?

Merci.

Réponse acceptée :

Utilisez simplement awk directement :

awk '//g/ {
        gsub(/./, "", $2)
        gsub(/../, "&:", $2)
        sub(/:$/, "", $2) 
        print $2,$3
}'

Avec cette solution, vous n'avez pas besoin de grep ni sed .


Linux
  1. Utilisation de l'entrée-sortie et de la redirection d'erreur sous Linux

  2. SSH - Générer et travailler avec des clés ssh

  3. Ajout avec "sed" ?

  4. Quel est le plus portable de Sed, Awk, Perl et Sh ?

  5. Comment utiliser sed pour modifier mes fichiers de configuration, avec des clés et des valeurs flexibles ?

Extraire et afficher des données avec awk

Commande AWK sous Linux avec des exemples

Manipuler du texte avec sed et grep

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Travaille toujours avec des boîtes de gnome

Principes de base de la ligne de commande Linux - Travailler avec des fichiers et des répertoires