dポイントプレゼントキャンペーン実施中!

ログファイルの中身が

むらかみ  1,2,3 4,5,6 7,8,9 ・・・
ぽんた   a,b,c d,e,f g,h,i ・・・
しゅういち い,ろ,は に,ほ,へ と,ち,り ・・・

のようにタブ区切りのログファイルの各行2番目の項目を削除して上書き保存

むらかみ  4,5,6 7,8,9 ・・・
ぽんた   d,e,f g,h,i ・・・
しゅういち に,ほ,へ と,ち,り ・・・

という作業をするスクリプトを組みたいのですが、perlはまったくわかりませんで苦闘しております。

最終的にcronで指定時間にスクリプトを動かせるようにしたいです。

よろしくお願いします。

A 回答 (4件)

こんな感じで書くとどうでしょう。



while (<DATA>) {

# タブで区切る
my (@tab_split) = split( /\t/, $_ );

# 前から2番目の要素を1つだけ抜き出す
splice( @tab_split, 1, 1 );

# 残った部分を出力
print OUT join( "\t", @tab_split );
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえず何とかローカル環境でうまくいきました!

お礼日時:2008/05/15 18:39

私がデバッグしたいる間にatom_seedさんから適切な回答が付きましたね。



#普段phpばかり書いているのでPerlは仕事が遅い(汗

ちなみに「perl タブ区切り」で検索すると、そこそこ有用なサイトがHitします。「タブ区切りで切り出し」くらいはコピペ出来そうでした。spliceはお手元に文法リファレンス(もしくはリファレンスサイトのURL)がないと思いつかないかもしれませんが、無骨でよければforeachで回してカウンタが2以外のものを使って出力用のデータを作っても間に合います。

お手元にリファレンスをお持ちでなければ、リファレンスになりそうなサイトのURLをBookmarkしておいてください。

  http://www.site-cooler.com/kwl/perl/
  http://perl.misty.ne.jp/
    • good
    • 0
この回答へのお礼

お忙しいところありがとうございました。

リンク先ブックマークしておきます。

お礼日時:2008/05/15 18:40

ANo.1です。

補足ありがとうございます。

>補足です。
>列はCGIで足していくのでなくなることはありません。

同じCGIでですか?(そうでないと整合が取れなくなって自滅しますけど)

とりあえず全データを配列に読み込んで(もしくはファイル名をリネームしても可)元ファイルを書き込みでOPEN(&LOCK)、配列をforeachなどで順次処理するとして、処理内容は「タブ区切りで切り出し、2番目以外の結果を使って再度1行分の文字列を作成して書き込む」となります。

上記内容でどの部分がわかりませんか?

この回答への補足

処理内容は「タブ区切りで切り出し、2番目以外の結果を使って再度1行分の文字列を作成して書き込む」

まさにここで苦戦しております。

補足日時:2008/05/15 16:33
    • good
    • 0

#補足をお願いします。



仕様についての疑問なのですが「2番目の項目を削除して上書き保存」してしまうとcronで実行するたびに列が減っていって最後は空になりますよね?それでいいのですか?

この回答への補足

補足です。
列はCGIで足していくのでなくなることはありません。

補足日時:2008/05/15 14:47
    • good
    • 0

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