- ベストアンサー
ファイルをある文字列で分割したいです。
数百MBの1つのログファイルがあります。 これを月ごとのファイルに分割しようと思ってます。 大きすぎて既存環境のviでは開けないので、コマンドやスクリプトで分割しようと考えてます。 とりあえず今年の3月(Mar)~7月(Jul)と5つ月ファイルに分割できればいいです。 perlで1行ずつチェックしようかと思ってましたが、 間違いなくもっと簡単に処理できるかと思い投稿しました ^ ^;; シェルはcshです。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>ログの内容によりますが、日付以外に「Mar」とかの文字列があったら >まずいかなぁと思ってます。 >なので、頭からxx~xx文字目が「Mar」だったらみたいなことが出来たらいいかと >考えてます。 >grepでそのようなことは出来るのでしょうか? もちろん正規表現が使えます。 ●行の先頭がMayで始まる行 grep '^May' ログファイル > 3月のログ ●行の先頭から五文字目からMayがある行 grep '^....May' ログファイル > 3月のログ ^ (チルダ)は行の先頭を意味します。 . (ドット)は任意の一文字を意味します。 正規表現はほかにもたくさんあります。ぜひいろいろ 試してみて修得してください。
その他の回答 (3)
- EEBE
- ベストアンサー率47% (23/48)
私もAns.#1さんの答えを書こうとしました。 単にviで開けるサイズにしたいのなら もっとずっと簡単な手(コマンド一発)もあります。 % split -行数 ファイル名
補足
アドバイスありがとうございます。 実はこれまでsplitしてviで編集してました。 さすがにつかれました。^ ^;; なので、応用のきくスクリプトorコマンド がないかなぁと思った次第です。
- yo-kan-62
- ベストアンサー率18% (18/98)
viで処理出来ない程のファイルは、sedで処理します。 記憶が定かでは無いのですが、 sed s/文字列/ ファイル名 で文字列が一致する行を表示した記憶があります。(ファイルに落とす時はリダイレクトします) くれぐれもうろ覚えなので、man sedでパラメータを確認して下さい。
お礼
回答ありがとうございました。 #1の補足のとおり、日付部分のみのマッチングを行いたいです。 日付が一番始めにくるので、マッチング処理の順番が指定できればできるのですが...。 manで調べてみます。
- xjd
- ベストアンサー率63% (1021/1612)
とりあえず、手っ取り早いのはgrepを使う事でしょう。 grep Mar ログファイル名 > 3月のログ grep Apr ログファイル名 > 4月のログ grep May ログファイル名 > 5月のログ grep Jun ログファイル名 > 6月のログ grep Jul ログファイル名 > 7月のログ grep 検索文字列 ファイル名 > 出力ファイル名 こんな感じです。
補足
ご回答ありがとうございます! やっぱりgrepでしょうか。 ログの内容によりますが、日付以外に「Mar」とかの文字列があったら まずいかなぁと思ってます。 なので、頭からxx~xx文字目が「Mar」だったらみたいなことが出来たらいいかと 考えてます。 grepでそのようなことは出来るのでしょうか?
お礼
ご回答ありがとうございました。 正規表現ですね。 調べたら...なるほど使えるものがたくさんありました! これで実現できそうです。
補足
無事できました! みなさん、ありがとうございました!