计算每个数字出现的次数

计算每个数字出现的次数

我有一个文本文件,其中包含一堆如下的 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

删除数字之间的空格,并使用该数字作为递增的数组索引

::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

相关内容