加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

跨多列排序(Perl)

发布时间:2020-12-15 21:46:03 所属栏目:大数据 来源:网络整理
导读:我将如何针对以下代码对多列进行排序? 目前,代码: 1.获取$目录中的@list文件 2.使用正则表达式为@list中的每个元素获取$fileName,$fileLocation和$fileSize 3.将(2)中的3个值打印成3个固定宽度的列 4.然后打印出文件总数和目录大小 我希望输出显示排序依据
我将如何针对以下代码对多列进行排序?

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

我希望输出显示排序依据:
1. $fileName然后
2. $fileLocation然后
3. $fileSize

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

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

printf ("%-60s %-140s %-5sn","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 %-5sn",$fileName,$fileLocation,$fileSize);
    $count++;
  }
  else {
    next;
  }
}

print "Total number of files: $countn";

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

解决方法

您可以指定自己的排序算法并将其提供给 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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读