我有一个输入列表,由跟踪指标的系统提供。我需要对它进行排序,以便删除低于给定阈值的使用数据,我真的不知道如何处理它。提供给我的数据应该与此类似:
ID Usage Estimated Cost
------------------------------------------------------------------
University Name 260000 1600.00
第一个字段是名称,以下两个字段是整数值。 我正在考虑尝试创建列表列表,但可能有一种更简单的方法。 我将如何删除仅获取3个字段并按使用价值对其进行排序?
答案 0 :(得分:2)
列表清单非常简单。
my @list;
while(<>) {
push @list, [$_,(split(/\s+/,$_,3))[1]];
}
foreach my $out (sort {$a->[1] <=> $b->[1]} @list) {
print $out->[0];
}
答案 1 :(得分:2)
您可以记住整行,因此您无需再次格式化。此外,只记住并使用其使用值超过阈值的行进行排序:
perl -ane 'BEGIN { $threshold = 2000 } # Insert your value here.
next if 1 .. 2 or $F[-2] < $threshold; # Skip the header and filtered lines.
push @A, [ $F[-2], $_ ]; # Remember the usage and the whole line.
}{ # At the end...
print map $_->[1],
sort { $a->[0] <=> $b->[0] } @A'
答案 2 :(得分:1)
标准方法是创建哈希列表。在您的情况下,您将输入文件转换为:
my @records = (
{ ID => "University Name", Usage => 260000, EstCost => 1600.00 },
{ ID => "...", Usage => 12345, EstCost => 9999.99 },
...
);
然后使用以下代码对它们进行排序(例如,使用):
my @sorted = sort { $a->{Usage} <=> $b->{Usage} } @records;
然后使用以下代码创建来自已排序记录的报告:
for my $r (@sorted) {
print "ID: ", $r->{ID}, ..., "\n";
}
如果需要,您可以采用捷径,但将每一行转换为哈希有几个优点:
sort { $a->{Usage} <=> $b->{Usage} ...
按使用情况排序