[Moscow.pm] Get human-readable output from du, sorted by size:

Nikolay Mishin mi на ya.ru
Чт Сен 29 00:37:37 PDT 2011


Dmitry Karpich++
В общем Дмитрий, думаю, этот вариант наикратчайший, даже лучше, чем инициализация хэша рангов
use Smart::Comments;
my %rang;
@rang{qw( P T G M K)} = ( 0 .. 5 );
### %rang

и регулярное выражение ([\d.]+) эквивалентно (\d+(?>\.\d+)?) клево

и он короче 
du -h | perl -e 'print map{$_->[0]}sort{$b->[2]<=>$a->[2]||$b->[1]<=>$a->[1]}map{$_->[2]=~ tr/kKMGT/00123/,$_}map{[$_,/([\d.]+)(\w)/]}<>'
du -h | perl -e'%hc=map{$_,$a=$a?$a*1024:1}qw(K M G T);print map $_->[1],sort{$b->[0]<=>$a->[0]}map{/^(\d+(?>\.\d+)?)(\w?)/;[$1*$hc{$2},$_]}<>'

на 6 байт варианта, предложенного 	Denis Evdokimov, хотя у него тоже хороший вариант
а главное решение Karpich размером 137 байт влезло в твиттер (max 139) !!



29.09.2011, 03:48, "Dmitry Karpich" <meettya на gmail.com>:
> Если perl ниже 5.14.0 и не понимает /r
>
> #!/bin/sh
> du -h |
> perl -e '
>         print
>                 map { $_->[0] }
>                 sort { $b->[2] <=> $a->[2] || $b->[1] <=> $a->[1] }
>                 map { $_->[2]  =~ tr/kKMGT/00123/, $_ }
>                 map { [ $_, /([\d.]+)(\w)/ ] }
>                         <>
> ' $*
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org

--
Nikolay Mishin


Подробная информация о списке рассылки Moscow-pm