根据日志中的条件计算值

时间:2015-06-18 08:04:01

标签: linux shell

我有一个如下所示的日志

11 13/06/2015:00:02:37
 10 13/06/2015:00:02:38
  7 13/06/2015:00:02:39
 10 13/06/2015:00:02:40
  1 13/06/2015:00:02:42
  1 13/06/2015:00:02:50
  1 13/06/2015:00:02:54
  2 13/06/2015:23:41:46
  1 13/06/2015:23:41:47
  2 13/06/2015:23:41:48
  1 13/06/2015:23:41:49
  2 13/06/2015:23:41:50
  1 13/06/2015:23:41:51
  2 13/06/2015:23:41:52
  1 13/06/2015:23:41:53
  2 13/06/2015:23:41:54
  1 13/06/2015:23:41:55
  1 13/06/2015:23:59:50
  2 13/06/2015:23:59:51
  2 13/06/2015:23:59:52
  2 13/06/2015:23:59:53
  2 13/06/2015:23:59:54
  2 13/06/2015:23:59:55
  1 13/06/2015:23:59:56
  2 13/06/2015:23:59:57
  2 13/06/2015:23:59:58
  2 13/06/2015:23:59:59

我想计算(第一个字段)基于分钟的值,如上所述,我们看到以秒为单位的计数:2计数@ 13/06/2015:23:59:53时间。我想总结它们以显示分钟。请帮我解决shell / linux中的代码问题。

谢谢,

2 个答案:

答案 0 :(得分:0)

试试这个:

cat path_to_your_log_file|awk '{split($2,res,":");var=res[1]":"res[2]":"res[3];counter[var]+=$1}END{for(i in counter){print counter[i],i}}' 

答案 1 :(得分:0)

您可以使用此方法,使用shell脚本和一些sed:

t=
sum=
f=$(mktemp)
sed -r 's/^ *(.*):[0-9]{2}$/\1/' txt > $f
while read line; do
  c=$(echo "$line"|cut -d' ' -f1)
  currt=$(echo "$line"|cut -d' ' -f2-)
  if [ -n "$t" ] && [ "$t" != "$currt" ]; then
    echo "$sum $t"
    t=$currt
    sum=$c
  elif [ -z "$t" ]; then
    t=$currt
    sum=$c
  else
    sum=$(($sum+$c))
  fi
done < $f
rm -f $f
if [ -n "$t" ] && [ "$t" = "$currt" ]; then
  echo "$sum $t"
fi