我有一个如下文所示的纯文本文件:
11/03/20 09:42:45 APP Service A stopped.
11/03/20 09:42:46 APP Starting service A.
11/03/20 09:42:46 APP Starting service A.
11/03/20 09:44:01 APP Service A stopped.
11/03/20 09:44:02 APP Starting service A.
11/03/20 09:44:02 APP Starting service A.
11/03/20 09:45:02 APP Service A stopped.
...
此文件仅指一项服务(服务A)。如您所见,包含“Starting”子字符串的行每次都重复两次。
使用批处理文件(ms-dos bat文件)我想计算纯文本文件中包含子字符串“Starting”的行数,但我不想计算重复的行。
例如,从下面的纯文本文件中忽略重复的行,我想要以下输出:
2
而不是(考虑重复的行):
4
我知道如何通过考虑重复的行而不是忽略它们来做到这一点。我在下面表演:
findstr /N "Starting" plain_text_file.txt | find /c ":"
任何不计算重复行的想法?
也许,一旦我得到结果(行数),我可以将它们除以2,但我不认为这是一种优雅的方式。
答案 0 :(得分:2)
试试这个:
@ECHO OFF &SETLOCAL
for /f "delims=" %%a in ('^<file find "Starting"') do set "$%%a=7"
for /f %%a in ('set $') do set /a count+=1
echo(%count%
答案 1 :(得分:-1)
如果您可以使用Cygwin,您可以使用
uniq
实现此目的的命令。
您可能想在DOS中尝试http://www.richpasco.org/utilities/unique.html来执行此操作。 语法是:
UNIQUE <infile.txt >outfile.txt