【发布时间】:2023-03-31 09:18:01
【问题描述】:
我在这个问题中关注@zdim 的递归解决方案 fastest way to sum the file sizes by owner in a directory 让我的文件大小按年汇总
perl -MFile::Find -E' use POSIX;
$dir = shift // ".";
find( sub {
return if /^\.\.?$/;
my ($mtime, $size) = (stat)[9,7];
my $yearmon = strftime "%Y%m",localtime($mtime);
$rept{$yearmon} += $size ;
}, $dir );
say ("$_ => $rept{$_} bytes") for sort keys %rept
'
它给出了这样的结果。
201701 => 7759 bytes
201702 => 530246 bytes
201703 => 3573094 bytes
201704 => 425827 bytes
201705 => 3637771 bytes
201706 => 2325391018 bytes
201707 => 127005 bytes
201708 => 2303 bytes
201709 => 231465431 bytes
201710 => 273667 bytes
201711 => 6397659 bytes
201712 => 333587 bytes
201802 => 874676 bytes
201803 => 147825681 bytes
201804 => 84971454 bytes
201805 => 3483547 bytes
201806 => 8004797 bytes
201807 => 184676 bytes
201808 => 1967947 bytes
201809 => 1592310 bytes
201810 => 24176 bytes
201811 => 883378 bytes
201812 => 6661592 bytes
201901 => 33979401 bytes
但在打印给定年份的所有可用月份后,我需要包括按年计算的总数,如下所示
201710 => 1111 bytes
201711 => 2222 bytes
201712 => 3333 bytes
2017 => 6666 bytes ( summed up )
201803 => 11111 bytes
201809 => 22222 bytes
2018 => 33333 bytes ( summed up )
我如何得到它?年月可能有空白,不必每年都以第 12 个月结束。
【问题讨论】:
-
有什么问题?鉴于您已经拥有的代码,这看起来像是您应该能够做的事情。一种方法是使用散列的散列,其中年份是第一个键,月份是第二个键(因此您将编写类似
$rept{$year}->{$month} += $size的内容)。它有点冗长,但绝对合理。 -
@Dada.. 是的,你是对的.. 但现在我意识到我会错过 ikegami 对它的破解..