使用awk计算2022年7月每一分钟的流量

具体文件格式如下:

2022-7-1 00:01:01 78
2022-7-1 00:01:04 89
2022-7-1 00:03:01 178
2022-7-1 00:03:05 890
2022-7-2 00:03:01 178
2022-7-3 00:03:05 890
...
2022-7-30 00:03:01 178
2022-7-31 00:07:05 8900

解题思路:设置三重for循环,在awk中设置三个变量来接收shell中的变量,因为需要使用进行正则匹配在求和。

# 清空两个文件,log.txt为临时保存最后结果的文件,log1.txt为保存最后结果的文件
>log.txt
>log1.txt

# 对每一天的每一小时的每一分钟进行for循环
for day in {1..31}
do
    for hour in {00..23}
    do
        for minute in {00..59}
        do
            cat flow.txt|awk -v aday="$day" -v ahour="$hour" -v aminute="$minute"  'BEGIN{sum=0}$1=="2022-7-"aday && $2~ahour":"aminute":"{num+=$3}END{print num}' >log.txt
        done
    done
done

# 删掉空行
egrep -v "^$" log.txt >> log1.txt

上述代码是必须要掌握的,掌握以后我们要进一步了解其时间复杂度,这个算法的运算时间大概3min左右,而进一步改进的算法(如下),其运算时间不到1s

awk '{time[$1,substr($1,5,1)substr($2,1,5)]+=$3}END{for (i in time)print i,time[i]}' flow.txt 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值