
ご教示お願い致します。
以下のファイルがあり
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で質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- フリーソフト Googleスプレッドシートで特定の言葉が含まれる行の色分けをしたいのですが 4 2022/04/30 15:29
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- その他(プログラミング・Web制作) パイソン初心者です 4 2022/06/29 06:49
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual Basicを使って三平方の...
-
C++でのテキストファイル読み込...
-
perlでcsvファイルを読む(ダブ...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルを途中行まで...
-
バッチファイルの作り方(CSV→...
-
dos変数の%~dp0は powershellで...
-
パスワードを外部ファイルから...
-
batファイルでrenameができませ...
-
コンソール出力をテキストに出...
-
エクセルVBA コードが同じでも...
-
掲示板を作るにあたり、ロック...
-
Net::FTPを使いファイル一覧の...
-
jpgファイルの頭の部分を読みと...
-
コマンドプロンプトからperlを...
-
Perlのmyとourについて
-
python renameについて
-
C言語で特定の行を抽出する方法...
-
複数ファイルを1つにするシェ...
-
オープンしたファイルで行の連結
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C++でのテキストファイル読み込...
-
ファイル名を複数個配列で確保...
-
「パスが見つかりません」とい...
-
Pythonでegrep機能をつかいたい
-
Fortranで1行飛ばして読み込む方法
-
Perl エラーログを指定の場所...
-
Pythonでテキストを行数指定し...
-
テキストファイルの各行を配列...
-
Ruby ファイル出力について
-
一行だけ読込
-
連番のファイルを何個も開きたい
-
ifstream/ofstream について
-
ifstream を利用した1行分のテ...
-
入出力共用が出来ないんです
-
同じようなソースなのですが片...
-
shellのコマンド deffの差分の...
-
ファイルから検索条件を読み込...
-
Pythonで非日本語のUnicode文字...
-
perlでCSVをソートする方法につ...
-
VBA Functionプロシージャで複...
おすすめ情報