Obtendo valores usando sed

0

Estou executando um script cuja saída é:

Circuit                           Packets/Bytes Sent Packets/Bytes Received
2/1 vlan-id 1005                         11589119559            14650974869
                                       3084237796552         13027195853643

Este script está sendo executado a cada cinco minutos, para propósitos do MRTG. Agora preciso obter o valor da segunda linha para as colunas 2 e 3 separadamente:

Bytes Sent 3084237796552

Bytes Received 13027195853643

Como posso fazer isso usando sed?

    
por Ogie 22.12.2011 / 07:07

2 respostas

1

Uma solução usando sed :

sed -n '$ { s/^\s*/Bytes Sent /; s/\([0-9]\)[ ]/\n/; s/\(\n\)\s*/Bytes Received /; p }' infile

Explicação:

-n                               # Disable printing lines.
$                                # In last line...
s/^\s*/Bytes Sent /              # Substitute all spaces from the beginning with literal string 'Bytes Sent'
s/\([0-9]\)[ ]/\n/             # Substitute first match of a space after a number with a new line.
s/\(\n\)\s*/Bytes Received /   # Substitute all space after the new line with literal string 'Bytes received'
p                                # Print this line (two lines after the included '\n')

Resultado:

Bytes Sent 3084237796552
Bytes Received 13027195853643
    
por 22.12.2011 / 12:23
0

Eu nunca peguei o jeito do sed e de várias linhas, mas se você quer que seja feito isso deve funcionar.

whatever_gives_your_data.sh | tail -1 |  awk '{ print "Bytes sent "$1 "\nBytes recieved "$2 }'
    
por 22.12.2011 / 12:05

Tags