• ベストアンサー

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

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

noname#41382
noname#41382

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

  • ベストアンサー
  • 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

  • 文字列の置換について

    ban5.txtには以下になってます。 4131048 4131053 x x 4850328 x x x x 3870357 3870369 x x 4131038 4131045 x x x この場合にxの行を一番最後の行の数値に置き換えたい場合 perlだとどのようにすればいいんでしょうか。 シェルでやろうとしたんですけどシェルだとちょっと難しいみたいなので perlでやりたいと思ってます。誰かいいスクリプトを教えて下さい。 宜しくお願いします。

    • ベストアンサー
    • Perl
  • 複数の文字列を検索

    あるログファイルの文字列を取得して。検索でヒットした文字列行 を返すスクリプトを作成しております。 検索:"OK"    日付 対象行 : OK! Tue Jul 19 文字列"OK"は普通に # grep "OK" ログファイルPath で検索できますが、 文字列と日付を両方引っ掛ける場合は・・・ grep -e "OK" -e env LANG=c date -u +"%a %b $d" ログファイルPath 当然コマンドエラーになります。 dateコマンドから日付を取得して、grepにて引っ掛ける方法を知りたいので すが、お分かりになる方、ご教授お願い致します。

  • シェルスクリプトのbashとperlについて

    シェルスクリプトのbashとperlについて 今さら気づいたのですが、PerlもUNIXのコマンドやシェルスクリプトとして使用できるということでしょうか。 RubyやPHPをUNIXのコマンドやシェルスクリプトとして使用することはできますでしょうか。 学ぶとしたら、bashとPerlのどちらが良いでしょうか。 また、シェルスクリプトはどんな用途や利点がありますでしょうか。 Webアプリケーションによるバックアップやログをタイマーでセットして自動的に取得したりすることは可能でしょうか。

  • シェルでファイルを読み込む

    csh を使っています。 ファイル hoge には1行に一つずつファイルの / からのパスが記されています。 hoge から 1行ずつファイルパスのリスト読み込んでそのファイルについて ls -al を行なった結果をファイル foo に保存したいのですが、どのようなシェルプログラムを作れば宜しいでしょうか? awk/sed も使える環境ですので、これらを使ったスクリプトでも構いません。 非常に初歩的な質問で申し訳ありませんが、宜しくお願いします。

  • cshからperlを呼び出しファイルに出力

    いつもお世話になっております。 cshからperlを呼び出しperlが出力する内容と入力項目を実行しているcsh内部で行ない結果をファイルへ出力したいのですが、そのような事ができるのでしょうか? ---------- cshファイル内 #!/bin/csh echo "●perl a.pl を実行します" | tee a.log perl a.pl ---------- perlファイル内 (perlがわかりませんので、perlの内容をcsh形式で記述させていただきます) (1)echo -n "日付を入力して下さい" (2)echo "⇒ " (3)set INPUT_DATE = $< (4)echo "日付:$INPUT_DATE " exit 0 ---------- cshから実行されたperl(csh)の内容[(1)(2)(3)(4)]をファイル(| tee a.log)へ出力することが可能でしょうか? ご存知の方がいらっしゃいましたらご教授願います。

  • 最終行をファイルを開かずにカットする方法はありますか?

    UNIXのviでファイルを開くと最終行が不完全といわれてしまいます。最後に半角スペースと変な文字が入っているようです。 viエディタのコマンドで、DDを押し最終行を手動でカットすると直るのですが、 Cやシェルなどで最終行をカットする方法はありますでしょうか?

  • 多数のファイルに決まった文字列を挿入

    お世話になります。 多数あるファイルに、下記のルールで「#coding: euc-jp」という文字列を挿入したいと考えています。 ルール: ・「#!」で始まる行は読み飛ばし、「#!」ではないで始まる行が現れたら、その行の前に挿入する。 ・「#!」ではないで始まる行が存在しない場合は、ファイルの末尾に挿入する。 プログラムを書けばできるのでしょうが、なるべく sed や perl コマンド等で簡単にできる方法を考えています。 できれば、バックアップファイルは取得せず、変更前後でパーミッションが保持されればと考えています。(sed -i, perl -iのように) よろしくお願いいたします。

  • ファイルからある文字列の個数を数えたい

    perl5でunixの"wc"や"grep -c"みたいに1つのファイルの中からある文字列の個数を カウントするスクリプトを作ろうとしています。 ファイルは256文字×10万行くらいのテキストで、 検索する文字列は15文字前後×40個(例えば「apple-000001」「lemon_orange」など)です。 どのようなスクリプトを組んだら効率よく各文字列をカウントできるのでしょうか? それよりwcやgrep -cを40回行った方が早いのでしょうか?

    • ベストアンサー
    • Perl
  • テキストファイル分割ソフト

    容量の大きいテキストファイル(数百メガバイト)をある程度のサイズ(数メガバイト)に分割したいのですが、分割時、行の途中で分割されては困ります。 サイズ優先で、しかも行の途中では分割しない、そんなソフトはあるでしょうか。 有料でも構いません。 よろしくお願いいたします。 ※windows10環境での使用を考えています。

  • 先頭から8文字目に1文字挿入したい

    シェルスクリプトで文章の整形をしています。 行の先頭から8文字目にスペースを挿入する方法を教えてください。 ウェブで検索したところsedコマンドでできるようですが、 シェルは初心者でなかなか読み解くことができず おもったようにできませんでした。 シェルはbashです。 よろしくお願いいたします。