中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-07 04:25
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用批處理計算在文本檔案中重複出現的字的次數? 查看 768 回复 6
楼 主 如何用批處理計算在文本檔案中重複出現的字的次數? 发表于 2008-01-01 01:24 ·  中国 台湾 台南市 中华电信
新手上路
积分 6
发帖 2
注册 2007-08-14 00:10
18年会员
UID 95089
性别 男
状态 离线
请教各位高手们,如何用批处理计算在文本档案中重复出现的字的次数?
比如 list.txt 内文是
ab
bb
bb
ca
ab
ac
ca

要如何用批处理得到 ab bb ca ac 出现的次数?
2 发表于 2008-01-01 02:47 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
echo off
for /f "delims=" %%a in (1.txt) do set /a ago2000%%a+=1
setlocal enabledelayedexpansion
for /f "delims=" %%b in ('set^|findstr "^ago2000.*=[1-9][0-9]*$"') do (set c=%%b &set c=!c:ago2000=! & echo !c!
)
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
huzixuan +4 2008-01-01 20:11
3 发表于 2008-01-01 10:58 ·  中国 台湾 台南市 中华电信
新手上路
积分 6
发帖 2
注册 2007-08-14 00:10
18年会员
UID 95089
性别 男
状态 离线
YA! 非常感激 junchen2 兄,三两下解决了小弟的问题
修改输出到档案试行后才发现,每运行一次得出的结果就加倍,
不晓得是哪里的关系呢?
另外又该如何该结果做个由多至少的排序呢?
4 发表于 2008-01-01 12:00 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
加个变量初始化,就不会累加了。

@echo off
for /f "delims=" %%a in (1.txt) do set /a ago2000%%a=0
for /f "delims=" %%a in (1.txt) do set /a ago2000%%a+=1
setlocal enabledelayedexpansion
for /f "delims=" %%b in ('set^|findstr "^ago2000.*=*$"') do (set c=%%b &set c=!c:ago2000=! & echo !c!
)
5 发表于 2008-01-01 20:11 ·  中国 安徽 芜湖 电信
高级用户
★★
积分 537
发帖 219
注册 2006-10-31 21:08
19年会员
UID 69036
性别 男
来自 芜湖
状态 离线
Originally posted by junchen2 at 2008-1-1 02:47:
for /f "delims=" %%b in ('set^|findstr "^ago2000.*=*$"') ...

请问 junchen2 兄,findstr 为什么要搜索两个不同的数字集呢?
?????????
江湖远
碧空长
路茫茫

一个人漫无目的的奔跑,风,刺骨的冷....
6 发表于 2008-01-01 23:18 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
to huzixuan兄,小弟认为更好一点,[1-9][0-9]*可以至少匹配一个数字。

to ago2000兄,要排序我有一个苯方法,
echo off
for /f "delims=" %%a in (1.txt) do set /a ago2000%%a+=1
setlocal enabledelayedexpansion
for /l %%b in (20 -1 1) do (
for /f "delims=" %%b in ('set^|findstr "^ago2000.*=%%b$"') do (
set c=%%b &set c=!c:ago2000=! & echo !c!
)
)
pause

效率太低,我今天用awk写了一个,是调用了SORT进行排序,效率也不高,,所以我就没有贴上来了。
7 发表于 2008-01-02 20:50 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
这个效率要高些,不过sort对于10以上排序是按头位数字大小排列的
@echo off
for /f "delims=" %%i in (Test.txt) do set /a .%%i+=1
for /f "tokens=1,2 delims=.=" %%i in ('set .') do set ..%%j.%%i=.
for /f "tokens=1,2 delims=.=" %%i in ('set ..^|sort/r') do echo %%j=%%i
pause
exit
论坛跳转: