2013-12-17 33 views
2

,我有一個純文本文件象下面這樣:計數線匹配的子串

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文件)我想要統計純文本文件中包含子字符串「開始」的行數,但我不想計算重複的行數。

例如,從下面一塊純文本文件的,而忽略重複的線,我想以下輸出:

2 

代替的(考慮到重複行):

4 

我知道如何做到這一點,考慮到重複的行,而不是忽略它們。我的表演如下:

findstr /N "Starting" plain_text_file.txt | find /c ":" 

任何想法不計算重複的行?

也許,一旦我有結果(行數),我可以將它們除以2,但我不認爲這是一個很好的方法來做到這一點。

+1

如果該文件是永遠爲你出再除以二是最簡單的方法。批處理文件通常依賴於被解析文本的格式。 – foxidrive

回答

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% 
+0

它不起作用。當它執行時說:環境變量$未定義。 – user304602

+0

用真實文件名替換'file'。並在雙引號''我的log.txt'「 – Endoro

+0

我已經把它放在雙引號,但同樣的消息出現。 – user304602

-1

如果你可以使用Cygwin,你會使用

uniq 

命令實現這一目標。

您可能想嘗試http://www.richpasco.org/utilities/unique.html在DOS中執行此操作。 語法是:

UNIQUE <infile.txt >outfile.txt 
+0

OP需要「開始」記錄的數量,而不是所有愚蠢的記錄本身。 – Endoro

+0

帶有'uniq'的命令行:'<文件uniq | find/c「開始」' – Endoro