perl - 根据特定列对 CSV 进行排序?

标签 perl sorting

我确定我过去曾这样做过,但我忘记了一些小事,但是如何在某个列上对 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/

相关文章:

C++ 将 vector 传递给排序函数实际上并不对其进行排序

java - 按内部数组的字段之一对多维数组进行排序

javascript - 如何使用 javascript 对字母数字列表进行排序

jquery - 如何对以 YYYY-M 格式字符串化的日期数组进行排序?

perl - 当 WxPerl 类没有方法时怎么办?

perl - 根据列标题对 CSV 文件列值进行排序

python - 如何计算文件中唯一字符的数量?

c++ - 降序排序的最佳方法是什么?

python结构解压

perl - 如何检查 Perl 脚本是否有任何编译错误?