- PR -

2つのファイルを、あるカラムをキーにしてperlで結合させるには?

1
投稿者投稿内容
poteo
会議室デビュー日: 2007/11/12
投稿数: 1
投稿日時: 2007-11-12 21:44
はじめまして。perl初心者です。

Linux上にて、logの編集を行うシェルスクリプトを作成中です。

2つのlogデータを、あるカラムをキーにして、perlにて結合させるにはどのようにしたらよいでしょうか?

log1:
2007/11/01 17:45:01,203,200711092837481,〜省略〜,81
2007/11/01 17:45:01,203,200711031234567,〜省略〜,46



log2:
200711029198412,583
200711031234567,531



これら2つのlogを、log1の3番目とlog2の1番目のカラムをキーとして比較し、
一致した場合は、log1の後ろにlog2を付加する。

※ 付加後のイメージ
2007/11/01 17:45:01,203,200711092837481,〜省略〜,81
2007/11/01 17:45:01,203,200711031234567,〜省略〜,46,531 <=== 一致するものだけ付加



イメージとしては「log1をfor文でまわしながら3番目のキーカラムをlog3のそれと比較し、一致すればlog1の行末にlog3を付加する」を考えております。

ファイルの中身を1行ずつ取得するところまでは何とか分かりそうなのですが、その1行の中からキーカラムを取得するところで特につまずいております。

よろしくお願いいたします。
kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2007-11-12 22:22
split関数でカンマで区切りのカラムを配列として取り出せるので、それを利用する方法はどうでしょう。
CSVとかsplitといったキーワードで検索すると、参考になるソースがあるかもしれません。

また、このlog2のつくりであれば、log2の1カラム目は行ごとにユニークな値と推測します。そうであれば、log2はsplit後に予めHASHに格納しておけば、キーの一致を判定するようなロジックを自力で書かなくてすむので少し楽ができるかも知れませんね。

1

スキルアップ/キャリアアップ(JOB@IT)