每天一道编程题(5)

1. 分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,也就是计算每个url的总访问大小

说明:本题生产环境应用:这个功能可以用于IDC网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩js等措施。
测试数据

59.33.26.101 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/1.jpg HTTP/1.1" 200 11899
59.33.26.102 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11790
59.33.26.103 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/1.jpg HTTP/1.1" 200 11490
59.33.26.104 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/3.jpg HTTP/1.1" 200 11590

本题需要输出三个指标: 【被访问次数】 【访问次数*单个被访问文件大小】 【文件名(带URL)】

awk '{url[$7]++;size[$7]+=$10}END{for(i in url){printf("%s %d %.2fK\n"),i,url[i],(size[i]/1024)}}' access.log | sort -k2,2

 2. 计算出1+2+3+..+100的结果。可以使用多种方法解答。

 

seq 1 100 | awk '{sum+=$1}END{print sum}'
awk '{for(i=1;i<=100;i++){sum+=i;}print(sum)}' <<</dev/null

   不用awk,利用循环

#!/bin/sh
for(( i=1; i <= 100; i++ ))
do
        sum=$(($sum+$i))
done
echo "For: $sum"
i=1
sum=0
while [ $i -le 100 ]
do
  sum=$(($sum+$i))
  i=$(($i+1))
done
echo "While: $sum"
sum=0
i=1
until [ $i -gt 100 ]
do
 ((sum+=i))
 ((i++))
done
echo "Until:$sum"

 

你可能感兴趣的:(每天一道编程题(5))