web-dev-qa-db-ja.com

Windowsでは、文字列がファイルに表示される回数をカウントする方法はありますか

現在、バッチスクリプトを作成しようとしていますが、この時点で、文字列「null」を見つけて、ファイルに表示される回数を確認する必要があります。

スクリプトが開始するたびにWebサイトからAPIをダウンロードしていますが、API内では時々「null」になっています。彼らのAPIがダウンロードされると、それは1行にダウンロードされ、私はこれを試してきました。

findstr /C:"null" %TEMP%\$SELECT%.txt | find /C "null" > $TEMP$\$SELECT$-status.txt

ただし、ファイルの長さが1行しかないため、これには「1」しか表示されません。

「null」がファイルにある回数を出力する他の方法はありますか?

barlopによって追加
OPは、サードパーティのソフトウェアをインストールできないと述べたばかりです。

2
user347636

私はこれが以前に尋ねられ、答えられたことがあると信じなければなりません。しかし、ここにその仕事をすることができる簡単なバッチスクリプトがあります。

::StringCount String File
::
::  Count the number of times that String appears in File.
::  The search is not case sensitive.
::  Enclosing quotes are not considered to be part of the string.
::  The string cannot contain =
::
@echo off
setlocal disableDelayedExpansion
set count=0
for /f usebackq^ delims^=^ eol^= %%A in (%2) do set "ln=%%A"&call :testLine %1
echo %count%
exit /b

:testLine
setlocal enableDelayedExpansion
:testLine2
if defined ln if "!ln:*%~1=!" neq "!ln!" (
  set /a count+=1
  set "ln=!ln:*%~1=!"
  goto testLine2
)
endlocal & set /a count=%count%
exit /b

コマンドラインの使用法は

StringCount null yourFile.txt

これは、大きなファイルでは非常に遅くなる可能性があります。


REPL.BATと呼ばれるハイブリッドJScript /バッチユーティリティ を作成しました。これにより、作業が簡単になり、非常に高速になります。ユーティリティは、stdinから読み取られた行に対して正規表現の検索と置換を実行し、結果をstdoutに書き込みます。このタスクを簡素化するオプションを含め、かなりの数のオプションがあります。このユーティリティは、XP以降の最新のWindowsマシンで実行される純粋なスクリプトです。完全なドキュメントは、スクリプトに埋め込まれています。

検索で大文字と小文字が区別されると仮定して、問題を解決するためにどのように使用できるかを次に示します

<yourFile.txt repl (null) \n$1\n ax | find /c "null"

検索を大文字と小文字を区別しないようにする場合

<yourFile.txt repl (null) \n$1\n aix | find /i /c "null"
2
dbenham

単一の実行可能ファイルをダウンロードするオプションはありますか?

必要なのは、移植性の高いgrepユーティリティです。
例えば。 grep(GNU grep)2.16

必要なオプションは-cまたは--count

以下の@dbenhamのコメントによると、実際に 'null'の行だけでなく、行ごとの複数のインスタンスもカウントする方法は次のとおりです。

 grep -o null file-to-read.txt | grep -c 
0
Hannu