我确定我过去曾这样做过,但我忘记了一些小事,但是如何在某个列上对 CSV 文件进行排序?我对有和没有第 3 方 Perl 模块的答案感兴趣。主要是没有的方法,因为我并不总是可以安装额外的模块。
示例数据:
姓名,25,女
姓名,24,男
姓名,27,女
姓名,21,男
在第二个数字列上排序后所需的最终结果:
姓名,21,男
姓名,24,男
姓名,25,女
姓名,27,女
最佳答案
由于 CSV 是一种非常复杂的格式,因此最好使用为我们完成工作的模块。
以下是使用 Text::CSV 的示例模块:
#!/usr/bin/env perl
use strict;
use warnings;
use constant AGE => 1;
use Text::CSV;
my $csv = Text::CSV->new();
my @rows;
while ( my $row_ref = $csv->getline( \*DATA ) ) {
push @rows, $row_ref;
}
@rows = sort { $a->[AGE] <=> $b->[AGE] } @rows;
for my $row_ref (@rows) {
$csv->combine(@$row_ref);
print $csv->string(), "\n";
}
__DATA__
name,25,female
name,24,male
name,27,female
name,21,male
关于perl - 根据特定列对 CSV 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221424/