GNU/Linux >> Znalost Linux >  >> Linux

Práce se sloupci – Awk a Sed?

Snažím se analyzovat textový soubor, který je generován expec skriptem, který
stahuje některé informace z přepínače.

Zde je ukázkový výstup:

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

Textový soubor obsahuje spoustu dalšího nevyžádaného odpadu, který mě nezajímá. Chci pouze řádky, které obsahují číslo přepínače a port – „1/g23“ ve výše uvedeném příkladu.

Udělal jsem grep na souboru, abych extrahoval řádky, které obsahují vzor „/g“
a funguje to skvěle.

Nyní chci pouze dva prostřední sloupce.
K vytištění sloupců jsem použil awk.

0000.0000.0000 1/g23

Nyní, když je to hotovo, chci se nechat svézt '.'
sed pro to fungoval dobře

000000000000 1/g23

Odtud chci převést pouze první sloupec do formátu MAC adresy.

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

Byl jsem schopen najít příkaz sed, který by toho dosáhl. Ale můj problém je, že to potřebuji udělat pouze na prvním sloupci. Nejsem si zcela jistý, jak mohu upravit pouze jeden sloupec a neztratit spojení mezi MAC a portem.

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

Jsem si jistý, že je to opravdu hloupý způsob, jak to udělat, ale bylo to to nejlepší, na co jsem mohl přijít. Existuje spolehlivější způsob, jak mohu dosáhnout toho, co potřebuji, aniž bych ztratil přidružení MAC a port?

Děkuji.

Přijatá odpověď:

Stačí použít přímo awk:

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

S tímto řešením nepotřebujete grep ani sed .


Linux
  1. Jak mohu pomocí sed změnit své konfigurační soubory s flexibilními klíči a hodnotami?

  2. AWK a názvy souborů s mezerou.

  3. Příznaky sed e a g nefungují společně

  1. Extrahování a zobrazení dat pomocí awk

  2. Práce s Input Output a přesměrováním chyb v Linuxu

  3. Jak změnit soubor na místě pomocí awk? (jako u sed -i)

  1. SSH – Generování a práce s ssh klíči

  2. Doplnění s „sed“?

  3. Který je nejpřenosnější z Sed, Awk, Perl a Sh?