アプリ版:「スタンプのみでお礼する」機能のリリースについて

access1.log ~ access500.logといった複数ファイルの中から、
特定の文字列を一斉検索し、その該当数をファイル別に集計し一覧表示させる方法を探しています。

Windows上でこれを実現する最も手軽な方法はありませんでしょうか?
秀丸・サクラエディタ等のマクロなど、何かしら方法があればご教授下さい。

宜しくお願いします。

A 回答 (3件)

該当数が行数で、単純な文字列の検索でよければ、


 findコマンド
が使えると思います。

---------------------------------------------------------------
コマンドプロンプトを起動し、*.logのフォルダへ移動したとして、
コマンドプロンプト>find /C "検索文字列" *.log

ファイル(kensaku.txt)に落すには、
コマンドプロンプト>find /C "検索文字列" *.log > kensaku.txt

英語の大文字と小文字の区別をしないで検索するには、
コマンドプロンプト>find /I /C "検索文字列" *.log > kensaku.txt
---------------------------------------------------------------

たか

この回答への補足

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

補足日時:2008/02/02 08:09
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/02/01 21:17

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 "確実に含まれていない文字"

--------
たか
    • good
    • 1
この回答へのお礼

コマンドプロンプトでもパイプ機能が使えるんですね。
勉強になります。ありがとうございます。

ただ、なかなか複雑になってきたので、
Cygwinなんかを入れた方が早いんじゃないかって気になってきました…。

お礼日時:2008/02/03 23:35

・ DOSは、UNIXを見習って作っているので、UNIX・Linuxでの便利な機能を利用できます。


  UNIX・Linuxの弟分といったところでしょうか。

・ 空行を含んでいなければ、もっとスマートに
   >findstr /R ... | find /C /V "確実に含まれていない文字"
  は
   >findstr /R ... | find /C /V ""
  でよいようです。つまり
   >find ""
  で空行を検索してくれることになり
   >find /V ""
  は空行以外すなわち全部を検索してくれることになります。
  今回は、検索結果ですから最適でしょう。

・ Cygwinは大賛成です。grepで一発ですね。
  ただし、UNIX・Linux未経験者だとちょっと重いかもしれませんが、
  今後LINUXを使っていこうと言う方ならお勧めですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/06 07:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています