命令行单行程序:快速且粗略的“传输的字节数”报告

命令行单行程序:快速且粗略的“传输的字节数”报告

好的。现在我们有一个 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 

相关内容