• ベストアンサー

複数のテキストファイルの特定文字列を検索し、それぞれファイル別に該当数を集計を知りたい

access1.log ~ access500.logといった複数ファイルの中から、 特定の文字列を一斉検索し、その該当数をファイル別に集計し一覧表示させる方法を探しています。 Windows上でこれを実現する最も手軽な方法はありませんでしょうか? 秀丸・サクラエディタ等のマクロなど、何かしら方法があればご教授下さい。 宜しくお願いします。

  • mo-c
  • お礼率80% (8/10)

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

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

該当数が行数で、単純な文字列の検索でよければ、  findコマンド が使えると思います。 --------------------------------------------------------------- コマンドプロンプトを起動し、*.logのフォルダへ移動したとして、 コマンドプロンプト>find /C "検索文字列" *.log ファイル(kensaku.txt)に落すには、 コマンドプロンプト>find /C "検索文字列" *.log > kensaku.txt 英語の大文字と小文字の区別をしないで検索するには、 コマンドプロンプト>find /I /C "検索文字列" *.log > kensaku.txt --------------------------------------------------------------- たか

mo-c
質問者

お礼

おお、これは凄く便利ですね。 ありがとうございます!とても参考になりました!

mo-c
質問者

補足

2008/02/02 補足 そういえば、検索文字列の抽出に正規表現を組み込む事って出来ないですかね? findstr では find /C のような表示をさせるオプションが無いようですね。

その他の回答 (2)

  • auty
  • ベストアンサー率58% (284/486)
回答No.3

・ DOSは、UNIXを見習って作っているので、UNIX・Linuxでの便利な機能を利用できます。   UNIX・Linuxの弟分といったところでしょうか。 ・ 空行を含んでいなければ、もっとスマートに    >findstr /R ... | find /C /V "確実に含まれていない文字"   は    >findstr /R ... | find /C /V ""   でよいようです。つまり    >find ""   で空行を検索してくれることになり    >find /V ""   は空行以外すなわち全部を検索してくれることになります。   今回は、検索結果ですから最適でしょう。 ・ Cygwinは大賛成です。grepで一発ですね。   ただし、UNIX・Linux未経験者だとちょっと重いかもしれませんが、   今後LINUXを使っていこうと言う方ならお勧めですね。

mo-c
質問者

お礼

やはりLinux環境の方が融通が利きそうですね。 ありがとうございました。

  • auty
  • ベストアンサー率58% (284/486)
回答No.2

findstrコマンドプロンプトが追加されているのは知りませんでした。 ありがとうございます。 DOSの時代の終わりのころからほぼすべての簡易ヘルプは    /? に統一されています。 コマンドプロンプト>findstr /? ------------------------------------------------------------------------------------- ファイルから文字列を検索します。 FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:ファイル] [/C:文字列] [/G:ファイル] [/D:ディレクトリ一覧] [/A:色属性] [/OFF[LINE]] 文字列 [[ドライブ:][パス]ファイル名[ ...]] /B 行の先頭にあるパターンを検索します。 /E 行の末尾にあるパターンを検索します。 /L 検索文字列をリテラルとして使用します。 /R 検索文字列を正規表現として使用します。 /S 現在のディレクトリとすべてのサブディレクトリから一致する ファイルを検索します。 /I 検索するときに大文字と小文字を区別しません。 /X 完全に一致する行を出力します。 /V 一致しない行のみを出力します。 /N 一致する各行の前に行番号を出力します。 /M ファイルに一致する行があるときに、ファイル名のみを出力します。 /O 一致する各行の前に文字オフセットを出力します。 /P 印刷不可能な文字を含むファイルをスキップします。 /OFF[LINE] オフライン属性が設定されたファイルをスキップしません。 /A:属性 2 桁の 16 進数で色属性を指定します。"color /?" を参照してくだ さい。 /F:ファイル 指定したファイルからファイル一覧を読み取ります (/ を指定する とコンソール)。 /C:文字列 指定された文字列をリテラル検索文字列として使用します。 /G:ファイル 指定されたファイルから検索文字列を取得します (/ を指定する とコンソール)。 /D:ディレクトリ セミコロンで区切られた検索されるディレクトリ文字列テキストの 一覧を検索します。 [ドライブ:][パス]ファイル名 検索するファイルを指定します。 複数の文字列を検索する場合には、引数 /C を使わず、各文字列をスペースで区切り ます。 たとえば、FINDSTR "hello there" x.y と指定した場合は、ファイル x.y で "hello" または "there" が検索されます。 これに対して、FINDSTR /C:"hello there" x.y と指定した場合はファイル x.y で "hello there" が検索されます。 正規表現クイック リファレンス: . ワイルドカード: 任意の文字 * 繰り返し: ゼロ個以上の直前の文字またはクラス ^ 行位置: 行頭 $ 行位置: 行末 [class] 文字クラス: セットの任意の 1 文字 [^class] 逆クラス: セット以外の任意の 1 文字 [x-y] 範囲: 指定した範囲の任意の文字 \x エスケープ: メタ文字 x のリテラル使用 \<xyz 単語位置: 単語の先頭 xyz\> 単語位置: 単語の終わり FINDSTR の詳細な正規表現に関しては、オンライン ヘルプのコマンド リファレンスを 参照してください。 ------------------------------------------------------------------------------------- /R 検索文字列を正規表現として使用します。 が使えますね。 ------------------------------------------------------------------------------------- >>>findstr では find /C のような表示をさせるオプションが無いようですね。 こういうときはパイプを利用しましょう。 >findstr /R ... | find /C ... ------------------------------------------------------------------------------------- ここで、ひと工夫が要ります。(要望に完璧ではないかも知れませが) ・ もし、検査結果すべてに共通した文字列があれば、    >findstr /R ... | find /C "共通した文字列" ・ もし、検査結果すべてに確実に含まれていない文字があれば、    >findstr /R ... | find /C /V "確実に含まれていない文字" -------- たか

mo-c
質問者

お礼

コマンドプロンプトでもパイプ機能が使えるんですね。 勉強になります。ありがとうございます。 ただ、なかなか複雑になってきたので、 Cygwinなんかを入れた方が早いんじゃないかって気になってきました…。

関連するQ&A

  • ファイル内の複数の特定文字列を抽出する方法

    ファイル内の複数の特定文字列を抽出する方法 linuxで、あるファイル内の特定のパターンに 該当する文字列の抽出方法を教えてください。 やりたいこと・前提条件 (0)linuxといいながら実はCygwin(タブン影響しないと思う) (1)特定のパターンはファイル内のどこに出現するか分からない (2)特定のパターン文字列中には改行は含まない。つまり必ず同一行内 (3)特定のパターンはファイル中に0回以上出現する (4)まったく同じ文字列は省きたい (5)特定のパターンは同一行中に複数回出現することもあり、すべて抽出する とりあえず、以下のコマンドを書きましたが不十分です。 grep -E "${PATTARN}" log.txt | sed -r "s/^.*(${PATTARN}).*$/\1/g" | sort -u これだと、(0)~(4)までの希望は実現できました。 (5)が未実現です。 JavaとかJavaScriptとかvbsとかなら正規表現にヒットした複数の文字列を 連続的に取り出して処理する方法は思い浮かぶのですが、 linuxコマンドの範囲だとどうすればいいかよくわかりません。 (5)を実現する方法。これを教えてください。 参考情報としてサンプルファイル内容と正規表現パターン・ 得たい結果も書いておきます。よろしくお願いします。 ◎参考 ○log.txt -------- RASCAL-1, RASCAL-123 [RASCAL-456] *** ** * *** [RASCAL-1] RASCAL-456 RASCAL-45 -------- ○PATTARN=RASCAL\-[0-9]{1,5} ○得たい結果 RASCAL-1 RASCAL-45 RASCAL-123 RASCAL-456

  • 複数のテキストファイルの中から、特定の文字列を検索するソフト

    題の通りです 複数のtxtファイルを選択し、その中から特定の文字列を一斉検索し、文字列の入ったファイルを探し出すソフトはないでしょうか?

  • ある文字列が含まれた行だけをテキストから抽出→結果を別のテキストに出力

    ある文字列が含まれた行だけをテキストから抽出→結果を別のテキストに出力したいです。 そのために何かいいソフトウェア、または方法は無いでしょうか? これまでは下記サイトを参考に秀丸エディタの検索&glep機能を使ってやってみたのですが、 抽出したい文字列の数が多く手動でやるのに限界を感じたので質問させていただきました。 http://hechimahige.blog71.fc2.com/blog-entry-4.html 秀丸エディタのマクロでも構いません。 よろしくお願いします。

  • テキストファイルに複数行の文字列追加

    自動化する方法はないでしょうか。 テキストファイルは複数で内容もまちまちですが、 特定の文字列が出てくるので、そこに三行ほど同じ内容を追記します。 マクロとかを使うのでしょうか? よろしくお願いします。

  • 文字列検索 複数のテキストファイル

    最近趣味でC言語を始めたのですが、 大本のリストを含んだテキストファイルに含まれる文字列 【テキストの中身】 osaka nagoya tokyo 上のリストを行ごとに読み込んで もう一つのファイルから検索して該当する文字列を含む行以外を削除するようにしたいのですが何か良い方法はないでしょうか? 色々調べながらやってはいるもののまだまだ勉強不足なせいかわからず困っております。よろしければご教授お願いします。

  • サクラエディタで起動時にマクロを実行するには

    フリーのエディタであるサクラエディタで、起動時にマクロを実行することができますか。方法をご存じの方は教えて下さい。 目的は起動したときにすぐに特定の文字列のある箇所を開きたいのです。マクロで文字列検索を実行させれば目的が果たせると思います。 サクラでできなければ他のフリーエディタでも構いません。ちなみにシェアウェアである秀丸でできることは知っています。

  • エクセル 複数のファイルを別ファイルで集計

    年ファイルの月シートには日々データーが更新されます。 それを集計ファイルにてデーターを合計であったり平均等であったりとまとめたいです。 質問は日々更新され増殖する月シートであり、年ファイルを簡単に集計ファイルへリンク(このリンクの表現が正しいかは不明)させるかで思案しております。 希望としてはシートが増え、年ファイルが増えても集計ファイルへのリンクは簡単にしたいです。 集計は年ファイルを開かなくても集計して欲しいです。 この希望に叶う方法はありますでしょうか? またその方法は関数でしょうか、ピボットで可能でしょうか。 私的にはマクロはなんか違うような気がします。 VBAならば私にはちょっと酷です。できるだけ頑張りますが・・ とても困っていますので何卒アドバイスをお願いします。

  • ファイル名に特定の文字列を含むファイルを開きたい

    セルに「abc」という文字列があります。 このセルをダブルクリックすると、特定のフォルダ内にある abcを含むファイル(たとえば090507 abc)を開く というようなことをしたいのですが、どのようにしたらよいでしょうか。 対象セルはA列です。 たとえばA2に「abc」とあれば、A2をダブルクリックすると 特定フォルダ内のabcをファイル名に含むファイルを開く A3に「xyz」とあれば、A3をダブルクリックすると 特定フォルダ内のxyzをファイル名に含むファイルを開く といった具合です。 文字列の指定はダブルクリック以外の方法でも構いません。 知識がないものでどのようにしたらよいかわかりません。 どなたかお詳しい方、どうぞよろしくお願い致します。 (ごく簡単なマクロの知識はあります)

  • Excelで該当者の検索値以外の列にあるデータ個数を関数で集計する

    仕事で使う表で困っています。 どなたかご教示いただければ助かります。。 過去ログを探しても該当するものを見つけきれず 質問を投稿させていただきました。 よろしくお願いいたします。 <内容> 表サンプル ====================================== A列   B列    C列     氏名  実施日1  実施日2 田中 田中  2009/10/20  2009/10/23 伊藤 鈴木 鈴木  2009/11/6 鈴木 田中 鈴木 鈴木  2009/10/1   2009/12/3 ・ ・ ※以降は随時追加されていき、  実施日は随時追加入力されていく。 ====================================== 以上のような表から A列にある氏名ごとにB列・C列のデータ個数を 集計したいのです。 求めている集計結果は以下のような感じです。 ====================== 氏名 実施日1 実施日2 田中  1    1 鈴木  2    1 伊藤  0    0 ===================== 今回ピボットテーブルを使わずに関数を使って実現したい のですが可能でしょうか? 詳しい方お力添えをお願いします。 以上よろしくお願いいたします。

  • エクセルで特定の文字列を含むセルを自動的に塗りつぶしたい

    ということなのですが。条件付き書式、あるいはマクロなどで解決できないでしょうか? 特定の文字列に「等しい」セルを塗りつぶすというのは、かんたんにできるようなのですが、「含む」になると、過去ログから見つけられませんでした。 300ファイルくらいあるデータから、特定の文字を含むセルをマーキングし、情報を抽出せねばなりません。 どなたか知恵をかしてくださいませ!