如何使用Windows命令行查找文件中string的出现次数?

我有一个庞大的文件与电子邮件地址,我想统计其中有多less人在这个文件。 我怎样才能使用Windows命令行呢?

我已经试过,但它只是打印匹配的线。 (顺便说一句:所有的电子邮件都包含在一行)

findstr /c:"@" mail.txt

Solutions Collecting From Web of "如何使用Windows命令行查找文件中string的出现次数?"

使用你所拥有的,你可以通过find获得结果。 我曾经见过这样的事情。

 findstr /c:"@" mail.txt | find /c /v "GarbageStringDefNotInYourResults" 

所以你正在计算你的findstr命令产生的行中没有垃圾字符串。 一种黑客,但它可以为你工作。 另外,只要使用你所关心的字符串上的find /c就可以了。 最后,你提到了每行一个地址,所以在这种情况下,上面的工作,但每行多个地址,这打破了。

可能会有点晚,但下面的脚本为我工作(源文件包含引号字符,这就是为什么我使用'usebackq'参数)。 脱字号(^)充当Windows批处理脚本语言中的转义字符。

 @setlocal enableextensions enabledelayedexpansion SET TOTAL=0 FOR /F "usebackq tokens=*" %%I IN (file.txt) do ( SET LN=%%I FOR %%J IN ("!LN!") do ( FOR /F %%K IN ('ECHO %%J ^| FIND /I /C "searchPhrase"') DO ( @SET /A TOTAL=!TOTAL!+%%K ) ) ) ECHO Number of occurences is !TOTAL! 

为什么不简单地使用这个(这决定了包含(至少) @ char的行数):

 find /C "@" "mail.txt" 

示例输出:

 ---------- MAIL.TXT: 96 

要避免输出中的文件名,请将其更改为:

 find /C "@" < "mail.txt" 

示例输出:

 96 

要捕获结果数字并将其存储在变量中,请使用此操作(在批处理文件中将%N更改为%%N ):

 set "NUM=0" for /F %N in ('find /C "@" ^< "mail.txt"') do set "NUM=%N" echo %NUM% 

我会在你的系统上安装unix工具(在任何情况下:-),那么它非常简单 – 看看这里:

用sed计算一个字符串的出现次数?

(使用awk:

 awk '$1 ~ /title/ {++c} END {print c}' FS=: myFile.txt 

)。

你可以在这里获得Windows的unix工具:

http://unxutils.sourceforge.net/

很简单的解决方案

 grep -o "@" mail.txt | grep -c . 

记得在行末点!

这里有一点可以理解的方式:

 grep -o "@" mail.txt | grep -c "@" 

首先grep只选择“@”字符串,并把每个新行。

第二个grep计数行(或带有@的行)。

grep工具可以从GnuWin项目或从WinGrep站点安装。 这是非常小,安全的文字过滤器。 grep是最有用的Unix / Linux命令之一,我每天都在Linux和Windows上使用它。 Windows的findstr是好的,但没有像grep这样的功能。

如果您喜欢CLI或批处理脚本,在Windows中安装grep将是最好的决定之一。

我在网上发现了这个。 看看是否有效:

 findstr /R /N "^.*certainString.*$" file.txt | find /c "@" 

这是我怎么做的,使用FINDSTR的AND条件(计算日志文件中的错误数):

 SET COUNT=0 FOR /F "tokens=4*" %%a IN ('TYPE "soapui.log" ^| FINDSTR.exe /I /R^ /C:"Assertion" ^| FINDSTR.exe /I /R /C:"has status VALID"') DO ( :: counts number of lines containing both "Assertion" and "has status VALID" SET /A COUNT+=1 ) SET /A PASSNUM=%COUNT% 

注意:这会计算“包含字符串匹配的行数”,而不是“文件中出现的总数”。

用这个:

 type file.txt | find /i "@" /c