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"