1

我想加入并处理来自 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
4

2 回答 2

1

试试这个:

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

编辑:

试试这个:

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=""}'
于 2011-10-26T22:41:47.157 回答
0

这可能有效:

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

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

于 2011-10-29T17:29:06.293 回答