Соедините и обработайте две строки из верхнего вывода команды - PullRequest
1 голос
/ 27 октября 2011

Я хотел бы объединить и обработать две строки, идущие из верхней команды:

shell> top -p 1 -b -d 1 | egrep '^top|^Cpu'
top - 15:17:45 up 736 days,  4:32,  3 users,  load average: 0.06, 0.03, 0.00
Cpu(s):  0.7% us,  0.8% sy,  0.0% ni, 97.1% id,  1.3% wa,  0.0% hi,  0.0% si

При попытке использовать команды awk и sed я сталкиваюсь с проблемой - вывод не производится.Какие команды я использовал бы, чтобы вывод выглядел так:

Time: 15:17:45 Cpu(s):  0.7% us,  0.8% sy,  0.0% ni, 97.1% id,  1.3% wa,  0.0% hi,  0.0% si

Вот фрагмент кода, который может быть полезен:

shell> echo 'top - 15:17:45 up 736 days,  4:32,  3 users,  load average: 0.06, 0.03, 0.00' | awk -F' up' '/^top/ {print "Time: " $1}' | sed 's/top - //'
Time: 15:17:45

Ответы [ 2 ]

1 голос
/ 27 октября 2011

попробуйте это:

command | sed -n "N;s/top - /Time: /;s/up.*\n//;p" 

Сначала он читает в строке секунд, затем заменяет «top -» на «Time:», наконец, он удаляет все, начиная с первого и до первого разрыва строки.

Выход:

Time: 15:17:45 Cpu(s):  0.7% us,  0.8% sy,  0.0% ni, 97.1% id,  1.3% wa,  0.0% hi,  0.0% si

EDIT:

Попробуйте это:

top -p 1 -b -d 1 | awk '
    /^top/{a=$0}
    /^Cpu/{
        sub(/top - /,"Time:",a);
        sub(/up.*$/,"",a);
        printf "%s %s\n",a,$0;a=""}'
0 голосов
/ 29 октября 2011

Это может работать:

top -bn1 |sed -ru '1!d;N;s/^top -\s*(\S*).*\n/Time: \1 /'

Опция sed -u, очевидно, загружает минимальные объемы данных из входных файлов и чаще очищает выходные буферы.У меня есть только версия Busybox top, поэтому я предполагаю, что она будет работать.

...