我正在研究一些统计数据。我有一个小时的专栏,数字表示在这个小时内这种交易发生了多少次和那种。
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
...
ERROR行并不总是存在,所以我需要一些(如果3 $ ==" INFO"那么)。我知道它是关于数组的,但是无法使它工作。
我真的很感谢你的帮助:)。
答案 0 :(得分: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
我离电脑不远。请原谅任何可能的语法错误。