前提・実現したいこと
perlでlinuxサーバー内のcsvのログ解析をしており、起点($original)と
目的地($destination)の組合せ別の集計値を集計値の降順で表示したいです。
ここに質問の内容を詳しく書いてください。
perlでcsvファイルを集計するプログラムを作成していますが、行き詰っておりお知恵を頂きたく投稿しました。
csvファイル内の起点($original)と目的地($destination)という項目があり、その二つの組合せの合計数をそれぞれ集計し、集計値が降順に並ぶようなプログラムを作成したいと考えています。
現状では下記のように起点($original)ごとの組合せでの集計値が降順に並んでいますが、
|original|destination|集計値|
|100|101|10|
|100|102|5|
|100|103|1|
|90|101|15|
|90|102|4|
|80|101|8|
|80|102|7|
下記のように全ての集計値が降順で並ぶようにプログラムをかきたいと思っております。
|original|destination|集計値|
|90|101|15|
|100|101|10|
|80|101|8|
|80|102|7|
|100|102|5|
|90|102|4|
|100|103|1|
何卒お力添えのほどお願いいたします。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
該当のソースコード
ここに言語名を入力
Perl
use strict;
use warnings;
open(FILE, 'example.csv') or die "$!";
my $info = {};
while (my $line = <FILE>) {
my($DateTime, $original, $destination, $stopover1, $stopover2, $stopover3, $Model, $tiles, $Method, $Time,
$TimeDifference, $Flag, $Date, $searchTime, $searchDay, $rideDate, $rideTime, $rideDay)
= split(/,/, $line);
++$info->{$original}->{$destination};
}
close(FILE);
foreach my $original( sort keys %$info){
foreach my $destination(sort {${$info->{$original}}{$b} <=> ${$info->{$original}}{$a}} keys %{$info->{$original}}){ my $count = $info->{$original}{$destination}; my @rec = ($original, $destination, $count); print join(',', @rec). "\n"; }
}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/20 09:34