Como selecionar linhas e reformatar a saída do comando?

2

Existe uma maneira de formatar a seguinte saída para que apenas as linhas 1 e 4 imprimir? Seria melhor se a primeira linha e a quarta linha pudessem sai na mesma linha assim:

sw pool test (sem parênteses) status up

Exemplo de comando e saída:

  • comando:

    show server pool
    
  • saída:

    sw pool test {
    members 1
    ip_addr 200.200.200.111
    status up
    

Formatação de saída desejada (observe que a chave que estava no o fim da linha 1 deve ser removido):

sw pool test status up

Como posso obter essa saída, preferencialmente usando o awk?

    
por jogle900 30.03.2015 / 21:11

1 resposta

2

Usando o awk

Imprime a primeira linha sem { e a quarta linha:

$ show server pool | awk 'NR==1{sub(/{/, ""); printf "%s",$0} NR==4'
sw pool test status up

Como funciona

  • NR==1{sub(/{/, ""); printf "%s",$0}

    A condição NR==1 seleciona a primeira linha. Para esta linha, o { é removido com o comando sub e, em seguida, a linha é impressa usando printf (sem uma nova linha).

  • NR==4

    A condição NR==4 seleciona a quarta linha. Como nenhuma ação é especificada para essa condição, awk faz a ação padrão que é. exatamente como queremos, para imprimir a linha.

Usando sed

A mesma coisa é possível com sed :

$ show server pool | sed 'h;N;N;x;N; s/{\n//'
sw pool test status up

Como funciona

  • h

    Isso salva a primeira linha no espaço de espera.

  • N;N

    Isto lê as linhas 2 e 3.

  • x

    Isso troca o espaço de espera e padrão. Isso coloca a linha 1 de volta no espaço padrão.

  • N

    Isto lê a próxima linha, linha 4, no espaço padrão, anexando-o à linha 1.

  • s/{\n//

    Isso remove a chave e a nova linha do final da linha 1 para que a linha 1 e a linha 4 sejam agora mescladas com a chave removida. Isso é o que é impresso.

por 30.03.2015 / 21:21