gpt4 book ai didi

perl - 跨多列排序 (Perl)

转载 作者:行者123 更新时间:2023-12-04 16:40:51 26 4
gpt4 key购买 nike

我将如何为以下代码跨多列进行排序?

目前,代码:
1. 获取 @list $directory 中的文件数量
2.使用正则表达式获取$fileName , $fileLocation$fileSize对于 @list 中的每个元素
3.将(2)中的3个值打印成3个固定宽度的列
4.然后打印出文件总数和目录大小

我希望输出按以下顺序显示:
1. $fileName然后
2. $fileLocation然后
3. $fileSize

$directory = '/shared/tmp';
$count = 0;

@list = qx{du -ahc $directory};

printf ("%-60s %-140s %-5s\n", "Filename", "Location", "Size");

foreach(@list) {
chop($_); # remove newline at end
if (/^(.+?K)\s+(.+\/)(.+\.[A-Za-z0-9]{2,4})$/) { # store lines with valid filename into new array
# push(@files,$1);
$fileSize = $1;
$fileLocation = $2;
$fileName = $3;
if ($fileName =~ /^\./) {
next; }
printf ("%-60s %-140s %-5s\n", $fileName, $fileLocation, $fileSize);
$count++;
}
else {
next;
}
}

print "Total number of files: $count\n";

$total = "$list[$#list]";
$total =~ s/^(.+?)\s.+/$1/;
print "Total directory size: $total\n";

最佳答案

您可以指定自己的排序算法并将其提供给 sort !

  • 文档:sort - perldoc.perl.org


  • 示例实现

    将您的结果(在散列引用中)推送到名为 @entries 的数组中,并使用类似下面的内容。
    my @entries;

    ...

    # inside your loop

    push @entries, {
    'filename' => $fileName,
    'location' => $fileLocation,
    'size' => $fileSize
    };

    ...

    my @sorted_entries = sort {
    $a->{'filename'} cmp $b->{'filename'} || # use 'cmp' for strings
    $a->{'location'} cmp $b->{'location'} ||
    $a->{'size'} <=> $b->{'size'} # use '<=>' for numbers
    } @entries;

    关于perl - 跨多列排序 (Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556331/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com