1

У меня есть текстовый файл с кучей 3-значных чисел, как это:

 0  2  3
 0  2  3
 0  2  9
 0  3  9
 0  9  2
 0  9  2
 0  9  9
 1  2  2
 1  2  2
 1  2  2
 1  2  9
 1  2  9
 1  3  3
 1  9  2
 1  9  2
 1  9  2
 1  9  3
 1  9  9
 1  9  9
 1  9  9
 1  9  9
 2  0  2
 2  0  3

Я хотел бы посчитать количество каждого числа, которое дублируется и сколько раз. Как это:

 0  2  3     2
 0  9  2     2
 1  2  2     3
 etc

Пока что следующее близко подошло к решению проблемы; но он обходит некоторые цифры:

@echo off
setlocal EnableDelayedExpansion

::set src=F:\DB\batchFiles\Numbers.txt
::set dst=F:\DB\batchFiles\Numbers_Converted.txt

set src=F:\DB\batchFiles\Numbers.txt
set dst=F:\DB\batchFiles\Numbers_Converted.txt
set /a row=1
set /a count=0
set line=
(for /F "delims=" %%L in ('sort %src%') do (
   if ~!line!~ == ~%%L~ (set /a row+=1 
   set /a count=row )
   if not ~!line!~ == ~%%L~ (echo !count!    %%L
   set line=%%L
   set /a row=1)
)) > "%dst%"

1 ответ1

1

Удалите пробелы между цифрами и используйте это число в качестве индекса массива, который вы увеличиваете

::Q:\Test\2019\02\13\SU_1405402.cmd
@Echo off
set "src=F:\DB\batchFiles\Numbers.txt"
set "dst=F:\DB\batchFiles\Numbers_Converted.txt"
:: clear array 
for /f "tokens=1,2 delims==" %%A in ('set arr[ 2^>Nul') do @set "%%A="
:: fill array
for /f "tokens=1-3" %%A in (%src%) do set /a "Arr[%%A%%B%%C]+=1"
:: output array
(for /f "tokens=2,3 delims=[]=" %%A in ('set Arr[ 2^>Nul') Do if %%B gtr 1 Echo:%%A %%B
)>%dst%

Пакет даст этот вывод:

> type F:\DB\batchFiles\Numbers_Converted.txt
023 2
092 2
122 3
129 2
192 3
199 4

Кстати, в PowerShell это один вкладыш:

> Get-Content .\numbers.txt| Group-Object -NoElement| Where-Object count -gt 1

Count Name
----- ----
    2  0  2  3
    2  0  9  2
    3  1  2  2
    2  1  2  9
    3  1  9  2
    4  1  9  9

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .