我确信我过去已经这样做过了,我忘记了一些小问题,但是如何在某个列上对CSV文件进行排序呢?我对有和没有第三方Perl模块的答案感兴趣.主要方法没有,因为我并不总是有权安装额外的模块.
示例数据:
name,25,female name,24,male name,27,21,male
在第二个数字列上排序后所需的最终结果:
name,female
解决方法
由于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,male