Trabalhando com colunas - awk e sed

4

Estou tentando analisar um arquivo de texto gerado por um script expec puxa algumas informações de um switch.

Aqui está um exemplo de saída:

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

O arquivo de texto tem muitos outros tipos de lixo que eu não estou interessado. Eu só quero as linhas que contêm o número do switch e a porta - "1 / g23" no exemplo acima.

Eu fiz um grep no arquivo para extrair as linhas que contêm o padrão '/ g' e funciona muito bem.

Agora, tudo o que quero são as duas colunas do meio. Eu usei o awk para imprimir as colunas.

0000.0000.0000 1/g23

Agora que isso é feito, eu quero pegar carona com o '.' sed funcionou bem para isso

000000000000 1/g23

A partir daqui, quero converter apenas a primeira coluna em um formato de endereço MAC.

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

Consegui encontrar um comando sed que faria isso. Mas o meu problema é que só preciso que seja feito na primeira coluna. Não tenho certeza de como posso editar apenas uma coluna e não perder a associação entre o MAC e a porta.

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

Tenho certeza de que essa é uma maneira realmente estúpida de fazer isso, mas foi o melhor que consegui fazer. Existe uma maneira mais confiável de conseguir o que preciso sem perder a associação de portas e MAC?

Obrigado.

    
por bourne 26.07.2012 / 00:34

2 respostas

6

Use o awk diretamente:

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

Com esta solução, você não precisa de grep nem sed .

    
por 26.07.2012 / 00:52
5

Apenas sed exemplo:

sed -r '\=1/g23=!d;
        s/[^ ]* *//;
        s/ *[^ ]* *$//;
        s/(..)\.(..)/:::/g;
        s/::/:/'

Se sua entrada contiver guias em vez de espaços, você precisará ajustar as expressões.

    
por 26.07.2012 / 00:56

Tags