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
.