プロが教える店舗&オフィスのセキュリティ対策術

当方、サーバ管理でインフラ系の経験しかなく、今回はperlでスクリプトの作成に挑戦しておりますがなかなか理解できていません。お知恵をお貸しください。

やりたいこと:
ある入力を受けたら、別ファイルに照会して特定列の文字列を抽出する。以下に例を示します。

入力が gad の場合(小文字です)、file1を参照する。例では一行目にGAD****があるのでこれに該当することとする。最終的にoffice が出力されるようにしたい。


file1の内容:
GAD93911 <test1> office
HOA14845 <test2> desk
ABC52311 <test3> chair
KFI33823 <test4> home

よろしくお願いいたします。

A 回答 (3件)

ファイルを開いて、各行を順番に /$in\d+\s<\w+>\s(\w+)/iでマッチするものを取り出して、それを使う・・

    • good
    • 0

サーバ管理のインフラ系って、イーサネット引いたり、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]を出力する。

サンプルコードはインデントのため、全角スペースを使っています。こぴぺは気をつけてください。参考になれば、うれしいです。
    • good
    • 0
この回答へのお礼

お礼遅れてすみません。丁寧な解説をいただきありがとうございます!おかげさまでこちらのコードを元に、きちんと期待の動作をさせることができました!

お礼日時:2010/02/05 20:12

<test1> などはどうするのですか?

    • good
    • 0
この回答へのお礼

ご質問ありがとうございます。test* の列は特になにもせず、無視でかまいません。

お礼日時:2010/01/30 07:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!