从顶部命令输出加入并处理两行

时间:2011-10-26 22:27:20

标签: linux bash sed awk top-command

我想加入并处理top命令中的两行:

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 个答案:

答案 0 :(得分:1)

试试这个:

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

首先它读入秒行,然后用“时间:”代替“top - ”,最后删除从第一个换行符开始的所有内容。

输出:

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

编辑:

试试这个:

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=""}'

答案 1 :(得分:0)

这可能有效:

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

sed -u选项显然从输入文件加载最少量的数据,并更频繁地刷新输出缓冲区。 我只有顶级的Busybox版本所以我猜它会起作用。