Perl 如何根据行长(包括空格)对文件进行排序
我正在尝试根据行长度对文件排序: 我叫蒂姆Perl 如何根据行长(包括空格)对文件进行排序,perl,file,sorting,Perl,File,Sorting,我正在尝试根据行长度对文件排序: 我叫蒂姆 我非常喜欢菠萝 嗨 像这样的事情 你好 我叫蒂姆 我非常喜欢菠萝 我也必须在其中包含空格,所以我尝试将每一行作为数组中的一行=1字符串放入数组中。然后我尝试对数组进行排序,但结果不太理想 这(来自一个现有的“重复”答案): perl-ne'push@a,$\;结束{打印排序{length$a length$b}@a}'文件 这是: #!/usr/bin/env perl use warnings; use strict; my @arr; sub
我非常喜欢菠萝
嗨 像这样的事情 你好
我叫蒂姆
我非常喜欢菠萝 我也必须在其中包含空格,所以我尝试将每一行作为数组中的一行=1字符串放入数组中。然后我尝试对数组进行排序,但结果不太理想 这(来自一个现有的“重复”答案):
perl-ne'push@a,$\;结束{打印排序{length$a length$b}@a}'文件
这是:
#!/usr/bin/env perl
use warnings;
use strict;
my @arr;
sub compareLength
{
length $::a <=> length $::b;
}
while (<>)
{
push @arr, "$_";
}
print (sort {compareLength} @arr);
#/usr/bin/env perl
使用警告;
严格使用;
我的@arr;
子比较长度
{
长度$::a长度$::b;
}
而()
{
按@arr,“$”;
}
打印(排序{comparelelength}@arr);
基本上都是一样的-n
创建while()
,END
将内容放在后面,比较函数是匿名(vs named)和内联的。(但它仍然存在,仍然是一个子程序)
哦,我把@a
改名为@arr
,因为我不喜欢两个不同的变量,都叫a
(@a
和$a
)
我希望这会有所帮助。使用字符串长度函数作为排序函数的比较步骤。(底部附近有一个perl解决方案)@DaveS我对此感到困惑,你能再深入一点吗detail@zzxyz你说的是一行中有perl的东西吗?@yibs或Yes不需要所有的
push
ing☺ perl-e'print sort{length$a length$b}文件
@haukex-是的,我故意选择了一个更显式的?解决方案显然,速度也很慢,我想这是有道理的。
#!/usr/bin/env perl
use warnings;
use strict;
my @arr;
sub compareLength
{
length $::a <=> length $::b;
}
while (<>)
{
push @arr, "$_";
}
print (sort {compareLength} @arr);