- ベストアンサー
ログファイルを更新したいのですが
ログファイルの中身が むらかみ 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で指定時間にスクリプトを動かせるようにしたいです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで書くとどうでしょう。 while (<DATA>) { # タブで区切る my (@tab_split) = split( /\t/, $_ ); # 前から2番目の要素を1つだけ抜き出す splice( @tab_split, 1, 1 ); # 残った部分を出力 print OUT join( "\t", @tab_split ); }
その他の回答 (3)
- shimix
- ベストアンサー率54% (865/1590)
私がデバッグしたいる間にatom_seedさんから適切な回答が付きましたね。 #普段phpばかり書いているのでPerlは仕事が遅い(汗 ちなみに「perl タブ区切り」で検索すると、そこそこ有用なサイトがHitします。「タブ区切りで切り出し」くらいはコピペ出来そうでした。spliceはお手元に文法リファレンス(もしくはリファレンスサイトのURL)がないと思いつかないかもしれませんが、無骨でよければforeachで回してカウンタが2以外のものを使って出力用のデータを作っても間に合います。 お手元にリファレンスをお持ちでなければ、リファレンスになりそうなサイトのURLをBookmarkしておいてください。 http://www.site-cooler.com/kwl/perl/ http://perl.misty.ne.jp/
お礼
お忙しいところありがとうございました。 リンク先ブックマークしておきます。
- shimix
- ベストアンサー率54% (865/1590)
ANo.1です。補足ありがとうございます。 >補足です。 >列はCGIで足していくのでなくなることはありません。 同じCGIでですか?(そうでないと整合が取れなくなって自滅しますけど) とりあえず全データを配列に読み込んで(もしくはファイル名をリネームしても可)元ファイルを書き込みでOPEN(&LOCK)、配列をforeachなどで順次処理するとして、処理内容は「タブ区切りで切り出し、2番目以外の結果を使って再度1行分の文字列を作成して書き込む」となります。 上記内容でどの部分がわかりませんか?
補足
処理内容は「タブ区切りで切り出し、2番目以外の結果を使って再度1行分の文字列を作成して書き込む」 ↑ まさにここで苦戦しております。
- shimix
- ベストアンサー率54% (865/1590)
#補足をお願いします。 仕様についての疑問なのですが「2番目の項目を削除して上書き保存」してしまうとcronで実行するたびに列が減っていって最後は空になりますよね?それでいいのですか?
補足
補足です。 列はCGIで足していくのでなくなることはありません。
お礼
ありがとうございます。 とりあえず何とかローカル環境でうまくいきました!