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