![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
ご教示お願い致します。
以下のファイルがあり
test.txt
------------------------
1,name1,ttt,1
2,name2,eee,1
1,name3,rrr,1
2,name3,fff,1
1,name5,ggg,1
1,name6,kkk,a
2,name6,kkk,a
2,name6,kkk,a
1,name6,kkk,a
2,name6,kkk,a
1,name6,kkk,3
2,name6,kkk,a
------------------------
test.pl
------------------------
use strict;
use warnings;
my %hash1 = ();
my @arrey1;
open(F, "<","test.txt") or die("error :$!");
eval{ flock(F, 1) };
while(<F>){
chomp;
my @temp = split /,/;
push @arrey1 , $temp[1];
}
close F;
foreach (@arrey1) {$hash1{$_}++;}
my @Data1 = sort keys %hash1;
print @Data1;
------------------------
結果 @Data1
------------------------
name1name2name3name5name6
------------------------
まず、名前をまとめるとこまでできたのですが、
ここからがわからないです。
やりたいことは、ここから、
$temp[0] が 1 の数を名前ごとにまとめ
ほしい結果
-----------------------
name1=1
name2=0
name3=1
name5=1
name6=3
------------------------
そこから上位3名を抜粋したい
※重複値は含める
ほしい結果
-----------------------
name6=3
name1=1
name3=1
name5=1
------------------------
このようなことを実行したいのですが、わかりません・・・
どうかご教示お願い致します。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.3ベストアンサー
- 回答日時:
No2です。
No2は無視してください。こちらを採用してください。失礼しました。
use strict;
use warnings;
my %hash1 = ();
open(F, "<","test.txt") or die("error :$!");
eval{ flock(F, 1) };
while(<F>){
chomp;
my @temp = split /,/;
if ($temp[0] eq '1'){
$hash1{$temp[1]}++;
}
}
close F;
#値でキーをを降順にソートし、上位3件のみ出力する
my $pval = -1;
my $count = 0;
foreach(sort {$hash1{$b} <=> $hash1{$a}} keys %hash1){
if (($pval != $hash1{$_} && $count < 3) || $pval == $hash1{$_}){
printf("%s=%d\n",$_,$hash1{$_});
$count++;
}else{
last;
}
$pval = $hash1{$_};
}
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.2
- 回答日時:
以下のようにしてください。
連想配列のキーを値で降順にソートし、上位3件を出力しています。
use strict;
use warnings;
my %hash1 = ();
open(F, "<","test.txt") or die("error :$!");
eval{ flock(F, 1) };
while(<F>){
chomp;
my @temp = split /,/;
if ($temp[0] eq '1'){
$hash1{$temp[1]}++;
}
}
close F;
#値でキーをを降順にソートし、上位3件のみ出力する
my $pval = -1;
my $count = 0;
foreach(sort {$hash1{$b} <=> $hash1{$a}} keys %hash1){
if (($pval != $hash1{$_} && $count < 3) || $pval == $hash1{$_}){
printf("%s=%d\n",$_,$hash1{$_});
$count++;
}
$pval = $hash1{$_};
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
perlプログラム 外部複数ファ...
-
Pythonでegrep機能をつかいたい
-
Pythonで非日本語のUnicode文字...
-
awkスクリプトでダブルクォーテ...
-
batファイルでrenameができませ...
-
VBA テキストファイルを読み取...
-
教えて!perlから.exeファイル...
-
Firefox で file:// で始まる U...
-
csvファイルの横方向への改行に...
-
MPLABにおけるsyntax errorに...
-
Perlの変数に文字数制限(容量...
-
ディレクトリ内CSVデータをすべ...
-
複数ファイルの読み込みについて
-
fopen64について
-
ファイル内の日付から1週間前...
-
パスから最後のディレクトリだ...
-
cgiのログの書き方
-
デルファイ TabControl タブの...
-
csvファイル改行コードの置換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「パスが見つかりません」とい...
-
ファイル名を複数個配列で確保...
-
perlで先頭の数値をみて昇順に...
-
Perl エラーログを指定の場所...
-
Pythonでegrep機能をつかいたい
-
Visual Basicを使って三平方の...
-
perlでCSVをソートする方法につ...
-
ifstream を利用した1行分のテ...
-
Pythonで非日本語のUnicode文字...
-
perlプログラム 外部複数ファ...
-
Perlによるディレクトリ内の連...
-
system関数と引数について
-
C++でのテキストファイル読み込...
-
Perlのワンライナーをスクリプ...
-
Perl 重複カウント 上位3名
-
バッチファイルでテキストファ...
-
perlで指定範囲を複数ファイル...
-
一行だけ読込
-
Fortranで1行飛ばして読み込む方法
-
perl 計算結果をファイルへ出力...
おすすめ情報