Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了跨多列排序(Perl)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我将如何针对以下代码对多列进行排序?

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

我希望输出显示排序依据:
1. $filename然后
2. $fileLOCATIOn然后
3. $fileSize@H_616_7@

$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 "@R_724_10586@l number of files: $count\n";

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

解决方法

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

>文件:sort – perldoc.perl.org@H_616_7@

示例实现@H_616_7@

将结果(在哈希引用中)推送到名为@entries的数组中,并使用类似下面的内容.@H_616_7@ @H_462_13@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)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。