• ベストアンサー

ファイルをある文字列で分割したいです。

数百MBの1つのログファイルがあります。 これを月ごとのファイルに分割しようと思ってます。 大きすぎて既存環境のviでは開けないので、コマンドやスクリプトで分割しようと考えてます。 とりあえず今年の3月(Mar)~7月(Jul)と5つ月ファイルに分割できればいいです。 perlで1行ずつチェックしようかと思ってましたが、 間違いなくもっと簡単に処理できるかと思い投稿しました ^ ^;; シェルはcshです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.4

>ログの内容によりますが、日付以外に「Mar」とかの文字列があったら >まずいかなぁと思ってます。 >なので、頭からxx~xx文字目が「Mar」だったらみたいなことが出来たらいいかと >考えてます。 >grepでそのようなことは出来るのでしょうか? もちろん正規表現が使えます。 ●行の先頭がMayで始まる行  grep '^May' ログファイル > 3月のログ ●行の先頭から五文字目からMayがある行  grep '^....May' ログファイル > 3月のログ ^ (チルダ)は行の先頭を意味します。 . (ドット)は任意の一文字を意味します。 正規表現はほかにもたくさんあります。ぜひいろいろ 試してみて修得してください。

noname#41382
質問者

お礼

ご回答ありがとうございました。 正規表現ですね。 調べたら...なるほど使えるものがたくさんありました! これで実現できそうです。

noname#41382
質問者

補足

無事できました! みなさん、ありがとうございました!

その他の回答 (3)

  • EEBE
  • ベストアンサー率47% (23/48)
回答No.3

私もAns.#1さんの答えを書こうとしました。 単にviで開けるサイズにしたいのなら もっとずっと簡単な手(コマンド一発)もあります。 % split -行数 ファイル名

noname#41382
質問者

補足

アドバイスありがとうございます。 実はこれまでsplitしてviで編集してました。 さすがにつかれました。^ ^;; なので、応用のきくスクリプトorコマンド がないかなぁと思った次第です。

  • yo-kan-62
  • ベストアンサー率18% (18/98)
回答No.2

viで処理出来ない程のファイルは、sedで処理します。 記憶が定かでは無いのですが、  sed s/文字列/ ファイル名 で文字列が一致する行を表示した記憶があります。(ファイルに落とす時はリダイレクトします) くれぐれもうろ覚えなので、man sedでパラメータを確認して下さい。

noname#41382
質問者

お礼

回答ありがとうございました。 #1の補足のとおり、日付部分のみのマッチングを行いたいです。 日付が一番始めにくるので、マッチング処理の順番が指定できればできるのですが...。 manで調べてみます。

  • xjd
  • ベストアンサー率63% (1021/1612)
回答No.1

とりあえず、手っ取り早いのはgrepを使う事でしょう。 grep Mar ログファイル名 > 3月のログ grep Apr ログファイル名 > 4月のログ grep May ログファイル名 > 5月のログ grep Jun ログファイル名 > 6月のログ grep Jul ログファイル名 > 7月のログ grep 検索文字列 ファイル名 > 出力ファイル名 こんな感じです。

noname#41382
質問者

補足

ご回答ありがとうございます! やっぱりgrepでしょうか。 ログの内容によりますが、日付以外に「Mar」とかの文字列があったら まずいかなぁと思ってます。 なので、頭からxx~xx文字目が「Mar」だったらみたいなことが出来たらいいかと 考えてます。 grepでそのようなことは出来るのでしょうか?

関連するQ&A