1

top コマンドから出てくる 2 行を結合して処理したいと思います。

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 に答える