2017-07-14 13 views
0

私はいくつかの統計に取り組んでいます。私は時を持つ列を持っています、この種のトランザクションが起こっているこの種類の間に何回このIDが何回あるかを識別する番号です。awk同じ値の行をマージする

00 28 INFO 
00 3 WARNING 
01 29 INFO 
01 8 WARNING 
01 1 ERROR 
...  

私はそのような何か持っている必要があります:ERRORラインが常にではないので、私はそこに(そして、もし3 $ == "INFO")いくつかを必要とする

hour INFO WARNING ERROR 
00 28 3  0 
01 29 8  1 
...  

を。私は配列について知っていますが、それを動作させることはできません。

私はあなたの助けを本当に感謝:)

+1

あなたの試行を見せる – anubhava

答えて

1

私はawkの中でそれを行うことはできませんが、私はbashでそれを解決することができます

# init array with 0 
declare -A matrix 
for ((hour=0;hour<=23;hour++)) do 
    for ((type=0;type<=2;type++)) do 
     matrix[$hour,$type]=0 
    done 
done 

# read and assign values 
while read -r line 
do 
    hour=$(echo $line | cut -f1 -d-) 
    count=$(echo $line | cut -f2 -d-) 
    type=$(echo $line | cut -f3 -d-) 
    case $type in 
    INFO) 
     matrix[$hour,0]=$count 
    WARNING) 
     matrix[$hour,1]=$count 
    ERROR) 
     matrix[$hour,2]=$count 
done < "$filename" 

# output 
echo "HOUR\tINFO\tWARNING\tERROR" 
for ((hour=0;hour<=23;hour++)) do 
    echo "${hour}\t$matrix[$hour,0]\t$matrix[$hour,1]\t$matrix[$hour,2]" 
done 

私はどこにもコンピュータの近くですよん。考えられる少しの構文エラーは許せません。

関連する問題