2017-03-23 1 views
1

おはよう、 次のコードで出力を新しい行に実行するたびに現在の時刻を表示する列ヘッダー "TIME"を追加する必要があります。トップコマンドと日付列を結合する方法

私が探している
top -b -n 1 -p 984 -o +PID -o +VIRT | sed -n '7,12p' | awk '{printf "%1s %-4s\n",$1,$5}' 

出力:

TIME  PID  VIRT 
12:00:00 984  1024 
12:16:01 984  995 
12:44:29 984  1008 

も、それはintervaと無限ループにする必要があります(値は、正しくない表示のためです)ユーザーがそれを停止するまで10秒の1秒。それを得るために

awk -v time=$(date '+%H:%M:%S') '{printf "%s %1s %-4s\n", time, $1, $5}' 

: すべてが

dateコマンドの結果にawk変数を設定し、事前に助け

答えて

1

ありがとうございPIDandVIRT.sh (Linuxのスクリプト)から実行されますループ内で使用すると、while

while :; do 
    top -b -n 1 -p 984 -o +PID -o +VIRT | sed -n '7,12p' | awk -v time=$(date '+%H:%M:%S') '{printf "%s %1s %-4s\n", time, $1, $5}' 
    sleep 10 
done 
+3

あなたはsedの必要はありません。 'cmd | sed -n '7,12p' | awk '{doSomething}' '=' cmd | awk 'NR> = 7 {doSomething} NR == 12 {exit}' 'や様々な代替構造。私は、あなたはOPが持っていたものをコピーしただけで、彼に正しい方法を示すかもしれないことを知っています。 –

2

ecommendはtopの代わりにpsコマンドを使用するには:あなたはawkを使用しているとき

echo "TIME PID VSIZE" 
while true ; do 
    echo "$(date +%H:%I:%S) $(ps -p 984 -o pid,vsize --no-headers)" 
    sleep 1 
done 
関連する問題