2011-10-26 14 views
1

から2行に参加して、プロセス:は、私はtopコマンドの出てくる2つの行を結合し、処理したい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 

が役に立つかもしれないコードの一部です:

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

時:

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 

答えて

1

これを試してみてください最初は秒の行で読み込み、「時間 - 」で「トップ」を置き換えます。最後に、最初の改行からすべてを削除します。

出力:

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

sedの-uオプション:

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

あなたのコマンドは最初に出力を生成しませんでした。ある量のバッファがいっぱいになると出力が書き出されることを知りました。 sedのバッファ時間や行数を制御する方法があるので、出力はより定期的に出力されますか? – dabest1

+0

私の編集した答えを見てください。これはうまくいくはずです。 – Chris

+0

ありがとう@クリス。 awkコマンドで遅れずに画面に表示しますが、ファイルに出力してテールしても、一度に1行は出力されません。それはそれほど重大ではありませんが、私はバッファリングの原因と回避方法を非常に興味があります。 – dabest1

0

これはうまくいくかもしれない:

これを試してみてください私のデータ出力バッファをより頻繁にフラッシュします。 私はそれが動作すると推測しているので、トップのBusyboxバージョンを持っています。

+0

ありがとう@potong。私はあなたの提案を試みましたが、-uオプションはバッファリングの問題を助けていません。また、私は希望の出力を得ていない、私はあなたのコマンドでこれを得ている: '時間:15:25:20タスク:162合計、1実行中、161睡眠、0停止、0ゾンビ'。 – dabest1

関連する問題