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 ›