#!/usr/local/bin/perl use strict; use warnings; my %id_flag = (); my %count = (); open(IN, 'customer_data.csv'); while(){ #開いたファイルを1行ずつ繰り返し処理する chomp; #末尾の改行コードを取り除く関数 #splitは文字列を分解する関数。引き数にカンマを渡し、カンマで文字列を分解して@dという配列に代入 #$d[0] => 02547 $d[1] => 佐藤大輔 $d[2] => 25 $d[3] => 北海道 $d[4] => 苫小牧市 my @d = split(/,/, $_); #Perlでは引き数を省略した場合は$_が暗黙的に使われる # print "@d \n"; # 重複している行は加算しない(ケース1) # next if($id_flag{$d[0]}++ > 0); # 重複している行は加算しない(ケース2) if($id_flag{$d[0]}){ #die "row duplicated"; # フラグが既に立っていれば重複なので終了 print "$d[0] row duplicated \n"; # フラグが既に立っていればその旨表示 next; #次のループへ } # フラグを立てる $id_flag{$d[0]} = 1; # 20~29歳を都道府県ごとにカウントアップ if(20 <= $d[2] && $d[2] <= 29){ # 20~29歳ならカウントアップ # 都道府県ごとにカウントアップ $count{$d[3]}++; #$d[3]は都道府県、例えば 静岡県、愛知県 等の名称が入る。 # print "$count{$d[3]} \n"; } } close(IN); open(OUT, '>tdfl.txt'); #出力する foreach(keys %count){ print "$_,$count{$_}\n"; print OUT $_,",",$count{$_}, "\n"; } close(OUT);