好的。现在我们有一个 lighttpd 服务器来加载我们的图片。
它每天记录一次,我们正在考虑将所有这些图像移动到我们的 S3 帐户以获得更好的加载时间,但在我们这样做之前,我需要至少“感觉”一下我们的转移会是什么样子。
现在我们有了标准的 lighttp 访问日志
accesslog.filename = "/var/log/lighttpd/images.access_log" accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
因此想要从该日志文件中转储所有“传输的字节”,非常简单。
cat images.access_log | awk'{打印$10}'
它会产生类似这样的输出。
19547
6138
17782
8044
345
0
2727
2125
1838
1649
2127
3275
3653
0
16688
现在 - 我已经进行了一些谷歌搜索,也许我忘记了一些东西,在 Linux 中是否有一个隐藏的命令可以获取所有输出,并将它们全部加在一起?所以我可以运行这个命令,让它每天输出一个非常大的数字,直到我得到我们每天带宽的基线?
- - 编辑 - -
我发现https://stackoverflow.com/questions/450799/linux-command-to-sum-integers-one-per-line
有没有办法让 awk 返回完整的数字,而不是像下面这样操作?
cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {print s}'
9.48886e+10
答案1
尝试cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {printf "%.f\n",s}'
答案2
您可以将它们组合成一个命令。如果第 10 列有数字,则:
awk '{s+=$10} END {printf("%.d\n",s)}' images.access_log