- ベストアンサー
Perlで別ファイルから文字列の抽出
当方、サーバ管理でインフラ系の経験しかなく、今回はperlでスクリプトの作成に挑戦しておりますがなかなか理解できていません。お知恵をお貸しください。 やりたいこと: ある入力を受けたら、別ファイルに照会して特定列の文字列を抽出する。以下に例を示します。 入力が gad の場合(小文字です)、file1を参照する。例では一行目にGAD****があるのでこれに該当することとする。最終的にoffice が出力されるようにしたい。 file1の内容: GAD93911 <test1> office HOA14845 <test2> desk ABC52311 <test3> chair KFI33823 <test4> home よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ファイルを開いて、各行を順番に /$in\d+\s<\w+>\s(\w+)/iでマッチするものを取り出して、それを使う・・
その他の回答 (2)
- MAGNAFIFTY
- ベストアンサー率69% (9/13)
サーバ管理のインフラ系って、イーサネット引いたり、HDDつけたりなのかな。知識の度合いもわからないので、とりあえず、簡単な例です。設計条件がはっきりしていないので、的外れだと申し訳ないのですが、勝手に解釈してサンプルを示してみます。とっかかりになれば、いいのですが。 参照ファイルが 1行1レコード 3つのフィールドで構成されている フィールドセパレータは、空白文字 行頭に空白文字は無い と仮定します。 inter10 さんは書きました: > ある入力を受けたら、別ファイルに照会して ある入力は、$searchkeyに当たるかな。 別ファイルは、$searchfileに当たるのかな。 ----- ここから ----- 01: #!/usr/bin/perl 02: 03:$searchfile = "file1"; 04:$searchkey = "gad"; 05: 06:open FH, $searchfile; 07: 08:while( $l=<FH> ) { 09: @f = split /\s+/, $l; 10: if( $f[0] =~ /$searchkey/i ) { 11: print $f[2], "\n"; 12: } 13:} 14: 15:close FH 16: ----- ここまで ----- プログラムの主要な行の説明は、 08: ファイルハンドラから1行取り出し、変数$lに格納。 EOFであれば、ループから抜け出す。 09: 1行を分割して、それぞれリスト変数@fに保存する。 セパレータは、正規表現で「空白文字1文字以上」とする。 10:第1フィールド$f[0]から検索文字を正規表現でパターンマッチ評価する。 「$searchkeyを含む、大小文字区別なし」としている。 11:パターンがマッチした場合、第3フィールド$f[2]を出力する。 サンプルコードはインデントのため、全角スペースを使っています。こぴぺは気をつけてください。参考になれば、うれしいです。
- Tacosan
- ベストアンサー率23% (3656/15482)
<test1> などはどうするのですか?
お礼
ご質問ありがとうございます。test* の列は特になにもせず、無視でかまいません。
お礼
お礼遅れてすみません。丁寧な解説をいただきありがとうございます!おかげさまでこちらのコードを元に、きちんと期待の動作をさせることができました!