跨多列排序(Perl)
发布时间:2020-12-15 21:46:03 所属栏目:大数据 来源:网络整理
导读:我将如何针对以下代码对多列进行排序? 目前,代码: 1.获取$目录中的@list文件 2.使用正则表达式为@list中的每个元素获取$fileName,$fileLocation和$fileSize 3.将(2)中的3个值打印成3个固定宽度的列 4.然后打印出文件总数和目录大小 我希望输出显示排序依据
我将如何针对以下代码对多列进行排序?
目前,代码: 我希望输出显示排序依据: $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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |