中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用批處理計算在文本檔案中重複出現的字的次數?
作者:
标题: 如何用批處理計算在文本檔案中重複出現的字的次數? 上一主题 | 下一主题
ago2000
新手上路





积分 6
发帖 2
注册 2007-8-14
状态 离线
『楼 主』:  如何用批處理計算在文本檔案中重複出現的字的次數?

请教各位高手们,如何用批处理计算在文本档案中重复出现的字的次数?
比如 list.txt 内文是
ab
bb
bb
ca
ab
ac
ca
要如何用批处理得到 ab bb ca ac 出现的次数?

2008-1-1 01:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 2 楼』:  

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

   此帖被 +4 点积分      点击查看详情   
评分人:【 huzixuan 分数: +4  时间:2008-1-1 20:11


2008-1-1 02:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ago2000
新手上路





积分 6
发帖 2
注册 2007-8-14
状态 离线
『第 3 楼』:  

YA! 非常感激 junchen2 兄,三两下解决了小弟的问题
修改输出到档案试行后才发现,每运行一次得出的结果就加倍,
不晓得是哪里的关系呢?
另外又该如何该结果做个由多至少的排序呢?

2008-1-1 10:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  

加个变量初始化,就不会累加了。

@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.*=[1-9][0-9]*$"') do (set c=%%b &set c=!c:ago2000=! & echo !c!
)



2008-1-1 12:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huzixuan
高级用户




积分 537
发帖 219
注册 2006-10-31
来自 芜湖
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by junchen2 at 2008-1-1 02:47:
for /f "delims=" %%b in ('set^|findstr "^ago2000.*=[1-9][0-9]*$"')  ...

请问  junchen2  兄,findstr 为什么要搜索两个不同的数字集呢?
[1-9][0-9] ?????????



江湖远
碧空长
路茫茫

    一个人漫无目的的奔跑,风,刺骨的冷....
2008-1-1 20:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 6 楼』:  

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进行排序,效率也不高,,所以我就没有贴上来了。

2008-1-1 23:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

这个效率要高些,不过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




2008-1-2 20:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: