2017-07-14 133 views
0

我正在處理一些統計信息。我有一個小時的專欄,在這個小時內這個交易發生的次數和類型會顯示多少次。awk合併具有相同值的行

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

我需要有類似的東西:

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

錯誤行並不總是存在的,所以我需要一些(如果3 $ == 「INFO」 當時)在那裏。我知道這是關於數組的,但無法使其工作。

我會很感激你的幫助:)

+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 

我無處一個計算機附近。請原諒任何可能的小語法錯誤。