我有一个如下所示的日志
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中的代码问题。
谢谢,
答案 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