Хорошо, вернем понятливость и
#!/bin/sh
du -h |perl -e '%byte_order = ( T => -4, G => -3, M => -2, K => -1, k => -1 );
print map { $_->[0] } sort { $byte_order{$a->[1]} <=> $byte_order{$b->[1]} ||
$b->[2] <=> $a->[2] } map { [ $_, /([TMGKk])/, /(\d+)/ ] } <>' $*
представим, как
#!/bin/sh
du -h |perl -e '
%byte_order = ( T => -4, G => -3, M => -2, K => -1, k => -1 ); #хэш приоритетов
, где T(терабайты)>G>M>K
print map { $_->[0] } sort {
#применяем Schwartzian Transform
(http://en.wikipedia.org/wiki/Schwartzian_transform)
$byte_order{ $a->[1] } <=> $byte_order{ $b->[1] } #в начале
сортируем по рипоритету G>K гигабайт больше килобайта
|| $b->[2] <=> $a->[2]
#потом сортируем по цифровому значению
} map { [ $_, /([TMGKk])/, /(\d+)/ ] } <>
#функцией map и регулярным выражением
#вытаскиеваем значения из строки вида:
# 150G ./xml
# 100M ./tmp
# 10K ./test
' $*
#входные параметры скрипта передаем на вход этой конструкции
28.09.2011, 13:23, "Nikita Zubkov" <[email protected]>:
> А может стоит развернутее и с комментариями? Это уже сложно поддерживать.
>
> 28 сентября 2011 г. 13:12 пользователь Nikolay Mishin <[email protected]> написал:
>
>> Добрый день Moscow-pm
>>
>> пока получается так
>> cat du-s
>> #!/bin/sh
>> du -h |perl -e '%bo = ( T => -4, G => -3, M => -2, K => -1, k => -1 ); print
>> map { $_->[0] } sort { $bo{$a->[1]} <=> $bo{$b->[1]} || $b->[2] <=> $a->[2]
>> } map { [ $_, /([TMGKk])/, /(\d+)/ ] } <>' $*
>>
>> Вопрос - а можно короче или оптимальнеею
>> спасибо.
>>
>> С Уважением Николай Мишин
>> --
>> Moscow.pm mailing list
>> [email protected] | http://moscow.pm.org
> --
> С уважением,
> Никита Зубков
> тел: +7 (915) 082-76-80
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
--
Nikolay Mishin
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org