2017-05-10 18 views
0

このsintaxisで変数awkを使用する必要があります[Subrack = xxx、Slot = x]:[sample]。 awkを使用して、下の出力からすべてのCPUの最新のサンプルだけを取得するにはどうすればよいですか?最後のサンプルを取得

Time Object    The_average_processor_load_of_a_board_in_percent 
22:30 Subrack=MAIN,Slot=1             1 
22:30 Subrack=MAIN,Slot=12            21 
22:30 Subrack=MSE1,Slot=1             1 
22:30 Subrack=MSE1,Slot=10            3 
22:30 Subrack=MSE1,Slot=11            3 
22:30 Subrack=MSE2,Slot=1             1 
22:30 Subrack=MSE2,Slot=10            1 
22:45 Subrack=MAIN,Slot=1             1 
22:45 Subrack=MAIN,Slot=12            20 
22:45 Subrack=MSE1,Slot=1             1 
22:45 Subrack=MSE1,Slot=10            3 
22:30 Subrack=MSE1,Slot=11            2 
22:45 Subrack=MSE2,Slot=1             1 
22:45 Subrack=MSE2,Slot=10            1 

Iは、所望の結果を得ることなく、次のコード

awk '!seen[$0]++ {lines[i++]=$0} END {for (i in lines) if (seen[lines[i]]==1) print lines[i]}' {print} {++seen[$0]}' 

を試みました。

掲載出力がカットされた、完全な一つはここに見ることができます。各CPUのための時間とサンプルを保持するhttps://www.dropbox.com/s/4d45x6m1701lpvz/complete_output.txt?dl=0

+0

あなたは余分な引用符を持っています - 構文の強調表示に注意してください。 – Barmar

答えて

1

使用アレイを。現在の行の時刻がそのCPUの保存された時刻よりも高い場合は、それらの値を置き換えます。

awk '$0 > time[$2] { time[$2] = $1; sample[$2] = $3; } 
    END { for (cpu in sample) printf("[%s]:[%d]\n", cpu, sample[cpu]) }' 
+0

すべてのCPUでどのように使用できますか? '[root @ lnxni075〜]#awk '$ 0>時間[$ 1] {時間[$ 1] = $ 0;サンプル[$ 1] = $ 3; } [{cpu}]} '/ tmp/test.log' [22:30]:[1] ] [22:45]:[1] – spwlite

+0

私は列番号を間違えましたが、今修正する必要があります。列2はCPUです、そうですか?これにより、各CPUのサンプルとタイムスタンプが保存されます。 – Barmar

+0

はい、列2はCPUです – spwlite

0

これはあなたのやりたいことですか?

$ cat tst.awk 
NR==1 { print $2, "latest"; next } 
{ latest[$2] = $3 } 
END { for (cpu in latest) print cpu, latest[cpu] } 

$ awk -f tst.awk file | column -t 
Object    latest 
Subrack=MAIN,Slot=12 20 
Subrack=MSE2,Slot=10 1 
Subrack=MSE1,Slot=10 3 
Subrack=MSE1,Slot=11 2 
Subrack=MAIN,Slot=1 1 
Subrack=MSE2,Slot=1 1 
Subrack=MSE1,Slot=1 1 
関連する問題