• ベストアンサー

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

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

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

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