GNU/Linux >> Linux Esercitazione >  >> Linux

Lavorare con le colonne:Awk e Sed?

Sto cercando di analizzare un file di testo generato da uno script expec che
richiama alcune informazioni da uno switch.

Ecco un esempio di output:

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

Il file di testo contiene molti altri file spazzatura che non mi interessano. Voglio solo le righe che contengono il numero dello switch e la porta - "1/g23" nell'esempio sopra.

Ho eseguito un grep sul file per estrarre le righe che contengono il pattern '/g'
e funziona benissimo.

Ora tutto ciò che voglio sono le due colonne centrali.
Ho usato awk per stampare le colonne.

0000.0000.0000 1/g23

Ora che è fatto, voglio fare un giro del '.'
sed ha funzionato bene per questo

000000000000 1/g23

Da qui voglio convertire solo la prima colonna in un formato di indirizzo MAC.

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

Sono stato in grado di trovare un comando sed che avrebbe realizzato questo. Ma il mio problema è che ho bisogno che sia fatto solo sulla prima colonna. Non sono del tutto sicuro di come posso modificare solo una colonna e non perdere l'associazione tra il MAC e la porta.

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

Sono sicuro che questo è un modo davvero stupido di farlo, ma è stato il meglio che potevo inventare. Esiste un modo più affidabile per ottenere ciò di cui ho bisogno senza perdere l'associazione MAC e porta?

Grazie.

Risposta accettata:

Basta usare awk direttamente:

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

Con questa soluzione non hai bisogno di grepsed .


Linux
  1. Contare il numero di righe con una stringa che si verifica N volte in più colonne?

  2. Lavorare con filtri e-mail e filtri e-mail globali in cPanel

  3. Come tagliare le prime n e le ultime n colonne?

  4. Come posso utilizzare sed per modificare i miei file di configurazione, con chiavi e valori flessibili?

  5. Trova e sostituisci con sed nella directory e nelle sottodirectory

Comando AWK in Linux con esempi

Manipolazione del testo con sed e grep

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Sto ancora lavorando con le scatole degli gnomi

Nozioni di base sulla riga di comando di Linux:lavorare con file e directory

sed sostituisce tutte le tabulazioni e gli spazi con un singolo spazio