如何用Perl脚本合并CSV列并添加自定义值?
Perl脚本处理CSV新增列
方法一:使用Text::CSV模块(推荐,适配复杂CSV场景)
首先通过CPAN安装Text::CSV模块:
cpanm Text::CSV # 或用cpan命令 cpan Text::CSV
创建如下Perl脚本:
use strict; use warnings; use Text::CSV; # 初始化CSV处理器,兼容含特殊字符的CSV my $csv = Text::CSV->new({ binary => 1, auto_diag => 1, }); # 打开输入、输出文件 open my $in_fh, '<', 'input.csv' or die "无法打开输入文件: $!"; open my $out_fh, '>', 'output.csv' or die "无法打开输出文件: $!"; # 逐行处理CSV内容 while (my $row = $csv->getline($in_fh)) { my ($first_name, $last_name) = @$row; # 将全大写的姓转为首字母大写格式(匹配预期输出的Doe) my $formatted_last = ucfirst(lc($last_name)); # 生成合并后的完整姓名 my $full_name = "$first_name $last_name"; # 性别字段(此处固定为man,可按需扩展判断逻辑) my $gender = 'man'; # 写入包含新列的行到输出文件 $csv->print($out_fh, [$first_name, $formatted_last, $full_name, $gender]); print $out_fh "\n"; } close $in_fh; close $out_fh;
方法二:简单文本处理(仅适用于无特殊字符的CSV)
若无法安装模块,可使用基础字符串处理实现(注意:字段含逗号、引号时会出错):
use strict; use warnings; open my $in_fh, '<', 'input.csv' or die "打不开输入文件: $!"; open my $out_fh, '>', 'output.csv' or die "打不开输出文件: $!"; while (my $line = <$in_fh>) { chomp $line; my ($first_name, $last_name) = split /,/, $line; my $formatted_last = ucfirst(lc($last_name)); my $full_name = "$first_name $last_name"; my $gender = 'man'; # 按预期格式拼接新行并写入 print $out_fh "$first_name, $formatted_last, $full_name, $gender\n"; } close $in_fh; close $out_fh;
使用步骤
- 将原始CSV保存为
input.csv,放在脚本同目录下 - 运行脚本:
perl csv_process.pl - 处理后的结果会保存在
output.csv中
内容的提问来源于stack exchange,提问作者Marc ELISABETH
相关产品推荐
相关产品推荐

