GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Arbeiten mit Spalten – Awk und Sed?

Ich versuche, eine Textdatei zu analysieren, die von einem Erwartungsskript generiert wird, das
einige Informationen von einem Schalter herunterzieht.

Hier ist eine Beispielausgabe:

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

Die Textdatei enthält viel anderen Müll, der mich nicht interessiert. Ich möchte nur die Zeilen, die die Switch-Nummer und den Port enthalten – „1/g23“ im obigen Beispiel.

Ich habe die Datei mit grep bearbeitet, um die Zeilen zu extrahieren, die das Muster „/g“
enthalten, und es funktioniert hervorragend.

Jetzt will ich nur noch die beiden mittleren Spalten.
Ich habe awk verwendet, um die Spalten zu drucken.

0000.0000.0000 1/g23

Jetzt, wo das erledigt ist, möchte ich das '.' loswerden.
sed hat dafür gut funktioniert

000000000000 1/g23

Von hier aus möchte ich nur die erste Spalte in ein MAC-Adressformat konvertieren.

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

Ich konnte einen sed-Befehl finden, der dies bewerkstelligen würde. Aber mein Problem ist, dass ich es nur in der ersten Spalte machen muss. Ich bin mir nicht ganz sicher, wie ich nur die eine Spalte bearbeiten kann und die Zuordnung zwischen dem MAC und dem Port nicht verliere.

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

Ich bin mir sicher, dass dies eine wirklich dumme Art ist, es zu tun, aber es war das Beste, was mir eingefallen ist. Gibt es einen zuverlässigeren Weg, um das zu erreichen, was ich brauche, ohne die MAC- und Portzuordnung zu verlieren?

Danke.

Akzeptierte Antwort:

Verwenden Sie einfach awk direkt:

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

Mit dieser Lösung benötigen Sie kein grep noch sed .


Linux
  1. SSH – Generieren und Arbeiten mit SSH-Schlüsseln

  2. Ergänzung mit „sed“?

  3. Wie schneide ich die ersten n und letzten n Spalten?

  4. AWK und Dateinamen mit Leerzeichen darin.

  5. sed e- und g-Flags funktionieren nicht zusammen

AWK-Befehl in Linux mit Beispielen

Bearbeiten von Text mit sed und grep

So löschen Sie leere Zeilen in Dateien mit Grep, Sed und Awk

Arbeite immer noch mit Gnome-Boxen

Grundlagen der Linux-Befehlszeile – Arbeiten mit Dateien und Verzeichnissen

sed ersetzt alle Tabulatoren und Leerzeichen durch ein einzelnes Leerzeichen