Я запускаю скрипт, вывод которого:

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

Этот сценарий запускается каждые пять минут для целей MRTG. Теперь мне нужно получить значение второй строки для столбцов 2 и 3 отдельно:

Bytes Sent 3084237796552

Bytes Received 13027195853643

Как я могу сделать это с помощью sed?

2 ответа2

1

Одно решение с использованием sed:

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

Объяснение:

-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]\)[ ]/\1\n/             # Substitute first match of a space after a number with a new line.
s/\(\n\)\s*/\1Bytes Received /   # Substitute all space after the new line with literal string 'Bytes received'
p                                # Print this line (two lines after the included '\n')

Результат:

Bytes Sent 3084237796552
Bytes Received 13027195853643
0

Я никогда не разбирался в sed и нескольких строках, но если вы просто хотите, чтобы это было сделано, это должно сработать.

whatever_gives_your_data.sh | tail -1 |  awk '{ print "Bytes sent "$1 "\nBytes recieved "$2 }'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .