
ご教示お願い致します。
以下のファイルがあり
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
------------------------
このようなことを実行したいのですが、わかりません・・・
どうかご教示お願い致します。

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{$_};
}

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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl アンド検索
-
Pythonで非日本語のUnicode文字...
-
FORTRANのプログラミング
-
エクセルVBA コードが同じでも...
-
fgets で値が取得できない
-
[Perl]ファイル出力のエンコー...
-
バッチファイルの作り方(CSV→...
-
VBAで巨大なファイルの途中から...
-
Windowsで複数のファイルを同じ...
-
openした後、closeしないでプロ...
-
awkスクリプトでダブルクォーテ...
-
JSP URLに表示される拡張子 .jsp
-
DOSコマンドで、標準出力を出力...
-
1行がやたら長いテキストをバッ...
-
バッチファイルで、記号を含む...
-
全角と半角文字が混在している...
-
batファイルでrenameができませ...
-
エディターでは改行なのにメモ...
-
.netのXmlDocumentを使ってテキ...
-
Perl で ディレクトリ及びサブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「パスが見つかりません」とい...
-
ファイル名を複数個配列で確保...
-
シェル(ksh)でテキスト文書を変換
-
Perlで文字列の操作がしたい
-
ディスク残量が無くなってしま...
-
繰り返しファイルをアップロー...
-
Fortranで1行飛ばして読み込む方法
-
どこがおかしいですか?教えて...
-
どなたか教えて下さい。
-
スマートに euc ページを sjis ...
-
絶対+相対アドレスから絶対ア...
-
perl の挙動について
-
シュワルツ変換の不具合
-
2行の文章を1行にまとめる
-
資格試験に向け、ipodで見れる...
-
excel 2003から VBAのreplaceマ...
-
シェルスクリプトについて
-
Perl エラーログを指定の場所...
-
VBScriptにて、テキストファイ...
-
dataファイルの特定の行から特...
おすすめ情報