CSVを名寄せして一行にまとめるperlスクリプト / perl script to aggregate csv records
Nid: 674
名前をキーに、複数行のCSVデータを一行にまとめます。
入力ファイル
$ cat input.csv 上根来水源の森,水源の森百選 上山公園,全国森林浴の森百選 上山公園,日本の都市公園100選 上山公園,日本の歴史公園100選 城崎温泉,日本百名湯 城山公園,全国森林浴の森百選 城山公園,日本のさくら名所100選 城山公園,日本の都市公園100選 城山公園,日本の夕陽百選 城山公園,日本の歴史公園100選 城山公園,夜景100選 城山展望台,夜景100選
1フィールド目をキーにCSVを名寄せするperlスクリプト
$ cat aggregatecsv.pl
#!/usr/bin/perl
use strict;
use warnings;
use URI;
use Text::CSV;
use Text::CSV::Encoded;
binmode STDOUT, ":utf8";
my $csv = Text::CSV::Encoded->new ({
encoding_in => "utf8",
encoding_out => "utf8",
});
my $infile = URI->new($ARGV[0]);
open my $fh, '<', $infile or die $!;
my %data;
while (my $line = <$fh>) {
$csv->parse($line) or die "Invalid data line";
my ($key, $val) = $csv->fields;
push @{ $data{$key} }, $val
}
for my $id (sort keys %data) {
printf "%s,%s\n", $id, join ':', @{ $data{$id} };
}
結果
$ perl aggregatecsv.pl input.csv 上山公園,全国森林浴の森百選:日本の都市公園100選:日本の歴史公園100選 上根来水源の森,水源の森百選 城山公園,全国森林浴の森百選:日本のさくら名所100選:日本の都市公園100選:日本の夕陽百選:日本の歴史公園100選:夜景100選 城山展望台,夜景100選 城崎温泉,日本百名湯
関連記事
- 1 of 2
- next ›