当前位置:  开发笔记 > 编程语言 > 正文

如何将bash中的文件大小相加,按日期将结果分组?

如何解决《如何将bash中的文件大小相加,按日期将结果分组?》经验,为你挑选了3个好方法。

在我使用的Linux服务器上,进程以随机间隔写入随机命名的文件.这是一个小样本,显示文件大小,修改日期和时间以及文件名:

27659   2009-03-09  17:24  APP14452.log
0       2009-03-09  17:24  vim14436.log
20      2009-03-09  17:24  jgU14406.log
15078   2009-03-10  08:06  ySh14450.log
20      2009-03-10  08:06  VhJ14404.log
9044    2009-03-10  15:14  EqQ14296.log
8877    2009-03-10  19:38  Ugp14294.log
8898    2009-03-11  18:21  yzJ14292.log
55629   2009-03-11  18:30  ZjX14448.log
20      2009-03-11  18:31  GwI14402.log
25955   2009-03-12  19:19  lRx14290.log
14989   2009-03-12  19:25  oFw14446.log
20      2009-03-12  19:28  clg14400.log

(请注意,有时文件大小可以为零.)

我想要的是一个bash脚本来总结文件的大小,按日期细分,产生这样的输出(假设我的算法是正确的):

27679 2009-03-09
33019 2009-03-10
64527 2009-03-11
40964 2009-03-12

结果将显示随时间变化的活动趋势,并突出显示异常繁忙的日子.

在SQL中,操作将是一个简单的操作:

SELECT SUM(filesize), filedate
FROM files
GROUP BY filedate;

现在,这在Perl或Python中可能都很简单,但我真的更喜欢bash shell或awk解决方案.在bash中按日期对文件进行分组似乎特别棘手(特别是如果你不能假设特定的日期格式).总结大小可以在我想的循环中完成,但是有更简单,更优雅的方法吗?



1> ashawley..:

我经常使用这个Awk的成语:

awk '{sum[$2]+= $1;}END{for (date in sum){print sum[date], date;}}'



2> 小智..:

(找到... | xargs stat"--printf =%s +"; echo 0)| 公元前



3> 小智..:

只有文件,递归,按日期排序并加总

find ./ -type f -printf '%TY-%Tm-%Td %s\n'|awk '{sum[$1]+= $2;}END{for (date in sum){print date, sum[date];}}'|sort

仅限当前目录中的文件,按日期排序并求和

find ./ -maxdepth 1 -type f -printf '%TY-%Tm-%Td %s\n'|awk '{sum[$1]+= $2;}END{for (date in sum){print date, sum[date];}}'|sort

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有