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
.