![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
テキストファイルをperlを使用して下記のように
変換したいと思っています。
---------------------------
【変換前】
aaa 8000 52 ---1行目
abc 200 48 ---2行目
cbd 250 31 ---3行目
efg 98 45 ---4行目
abc 390 68 ---5行目
ddd 89 90 ---6行目
aaa 65 40 ---7行目
fed 900 66 ---8行目
efgh 99 49 ---9行目
abc 40 40 ---10行目
【変換後】
aaa 8000 52 ---1行目
cbd 250 31 ---3行目
efg 98 45 ---4行目
abc 390 68 ---5行目
ddd 89 90 ---6行目
fed 900 66 ---8行目
efgh 99 49 ---9行目
----------------------------
やりたいことはまず行の先頭文字列(aaaやabc)が完全に一致する行が
複数あれば(2,5,10行目のabcや1,7行目のaaa)、2番目の文字列(スカラー値)の値が
小さい方の行は出力しないようにしたいと思っています。
例えば上記の場合ですと、2,5,10行目の最初の文字列はaaaで完全に一致しており、
2番目の列の値は5行目が390に対し、2行目は200、10行目は40と小さくなっているため
2行目,10行目は出力されない、というのが望んでいる動作です。
sortを使用してどうにかならないかとも、考えたのですが
そこから先がどうしていいか思いつきませんでした。
何かよい方法を思い浮かぶ方がいましたら、どのようにPerlで記述すればよいのか
教えて頂けないでしょうか?
宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
ソートには「シュウォーツ変換」と呼ばれるやり方があります。
ネット上にはたくさんの情報がありますので参照してください。次のプログラムは、1行に1処理で書いています。use strict;
my @data;
push @data, [$_, $., split /\s+/] while <DATA>;
@data = sort { $a->[2] cmp $b->[2] or $b->[3] <=> $a->[3] } @data;
@data = @data[0, grep { $data[$_ - 1]->[2] ne $data[$_]->[2] } 1 .. $#data];
@data = sort { $a->[1] <=> $b->[1] } @data;
@data = map { $_->[0] } @data;
print @data;
__DATA__
aaa 8000 52
abc 200 48
cbd 250 31
efg 98 45
abc 390 68
ddd 89 90
aaa 65 40
fed 900 66
efgh 99 49
abc 40 40
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) エクセルである文字が入っている行とその上下の行を削除したいのですが、一気にできる方法はないですか? 5 2022/10/14 14:14
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Excel(エクセル) Excelで、行に複数の数字が入力されているセルが複数の列存在し、行を跨いでセル内の数値を並び替える 5 2022/06/17 18:03
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Java Java 南京錠 2 2023/02/04 11:46
- Excel(エクセル) Excel リンク先のエクセルファイルの削除 同時に行を削除したい 1 2022/11/29 16:20
- その他(Microsoft Office) ある表(10桝程度)の中に数字が入っています。ダブっている数字を除く数字の合計数の計算方法 5 2023/02/15 11:33
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
RegQueryValueExでの2バイト文字
-
【Excel VBA】10進数を2進数に...
-
POSTで配列のデータを渡す方法は?
-
Cのプログラムがどうしても動き...
-
エクセルVBA:日付データの変換...
-
テキストファイルの結合について
-
printfの%eで指数部分の桁数を...
-
linuxのシェルでファイル名に先...
-
ファイルに書き込めない/ファ...
-
C言語について
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
Excel 1セル当りの文字数が2...
-
UTF-8で5~6バイトになる文字コ...
-
DataGridViewの特定列に入力さ...
-
10Mバイトて文字数に すると何...
-
3バイト文字(UTF-8)をprintfで...
-
Excel VBA メール作成について ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
linuxのシェルでファイル名に先...
-
int型(2バイト)データの分割
-
【Excel VBA】10進数を2進数に...
-
C#でのswitch文
-
データの値の近いものをグルー...
-
C言語 ファイル内のデータと入...
-
10個の実数に対する降順ソート...
-
C言語の構造体にてバブルソート...
-
'dataType' 引数を Null にする...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
c言語での wavファイルの編集(...
-
テキストファイルの結合について
-
C言語についてです! 同じ年の...
-
sort関数でひらがなとカタカナ...
-
matlabでのRRI検出
おすすめ情報