找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 35517|回复: 12

[文本处理] [已解决]批处理如何统计出文本中出现次数最多的一个字符?

[复制链接]
发表于 2015-10-21 10:26:33 | 显示全部楼层 |阅读模式
本帖最后由 wsbdwpshh 于 2015-10-26 11:39 编辑

如何查出一个文本中 出现 最多的一个字?前提是 不知道这个字是 啥字!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-10-21 13:10:34 | 显示全部楼层
本帖最后由 pcl_test 于 2016-8-8 21:02 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"文本.txt"&pause&exit
  2. var arr={}, max=0;arr['list']=[];
  3. var str=WSH.StdIn.ReadAll().replace(/[ \s]/g, '') //清除空白符
  4. for (var i=0; i<str.length; i++){
  5.     if(!arr[str.charAt(i)]){
  6.         arr['list'].push(str.charAt(i));
  7.         arr[str.charAt(i)]=1
  8.     }else arr[str.charAt(i)]++;
  9. }
  10. arr['list'].sort(function(a, b){return arr[b]-arr[a]});
  11. for(var i=0; i<arr['list'].length; i++){
  12.     if(arr[arr['list'][i]]<max)break;
  13.     WSH.echo(arr['list'][i]+':'+arr[arr['list'][i]]);
  14.     max=arr[arr['list'][i]];
  15. }
复制代码

评分

参与人数 1技术 +1 收起 理由
wsbdwpshh + 1 感谢分享

查看全部评分

发表于 2015-10-21 13:36:53 | 显示全部楼层
本帖最后由 WHY 于 2015-10-21 14:14 编辑
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt & pause & exit
  3. @end

  4. var s = WScript.StdIn.ReadAll().replace(/[\r\n]/g, '');
  5. s = s.match(/./g).sort().join('');
  6. var re = /(.)(\1)*/g, n = 0, map = {}, ar;
  7. while(ar = re.exec(s)){
  8.     if (ar[0].length >= n){
  9.         n = ar[0].length;
  10.         map[n]=map[n]?ar[1]+','+map[n]:ar[1];
  11.     }
  12. }
  13. WScript.Echo('最多: ' + map[n] + '\n个数: ' + n)
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 算法nice

查看全部评分

发表于 2015-10-21 16:24:11 | 显示全部楼层
借 3 楼代码一用
  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < %0 & pause & exit
  3. @end

  4. var s = WScript.StdIn.ReadAll();
  5. s = s.match(/[^\r\n]/g).sort().join('');
  6. var re = /(.)(\1)*/g, n = 0, ar = [];
  7. s.replace(re,function($0,$1){
  8.         n++;
  9.         ar.length = ar.length > $0.length ? ar.length : $0.length;
  10.         ar[$0.length-1] ? ar[$0.length-1].push($1) : ar[$0.length-1]=[$1];
  11. })
  12. WScript.Echo('最多: ' + ar.pop().join('\r\n') + '\n个数: ' + n);
复制代码
发表于 2015-10-21 16:40:22 | 显示全部楼层
本帖最后由 wankoilz 于 2015-10-22 14:02 编辑

练习awk!
以下代码找出目标文本出现次数前20位的字符:
  1. #&cls&@gawk -f %0 a.txt>con&pause>nul&exit
  2. {
  3.     for(i=1;i<=length($0);i++){
  4.         arr[substr($0,i,1)]++
  5.     }
  6. }
  7. END{
  8.     for (x in arr){
  9.         tmp="0000000000"arr[x]
  10.         tmp=substr(tmp,length(arr[x])+1,10)
  11.         arr[x]=tmp" "x
  12.     }
  13.         len=asort(arr,ta)
  14.         for(i=len-19;i<=len;i++){
  15.             printf "%d %s\n",substr(ta[i],1,10),substr(ta[i],11,2)
  16.         }
  17. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk
发表于 2015-10-21 19:05:40 | 显示全部楼层
哈哈,python Counter 简直神器

http://www.zlovezl.cn/articles/collections-in-python/
  1. # -*- coding: utf-8 -*-
  2. """
  3. 下面这个例子就是使用Counter模块统计一段句子里面所有字符出现次数
  4. """
  5. from collections import Counter

  6. s = '''A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'''.lower()

  7. c = Counter(s)
  8. # 获取出现频率最高的5个字符
  9. print c.most_common(5)


  10. # Result:
  11. [(' ', 54), ('e', 32), ('s', 25), ('a', 24), ('t', 24)]
复制代码
发表于 2015-10-21 20:12:53 | 显示全部楼层
本帖最后由 CrLf 于 2015-10-21 20:49 编辑

回复 6# 依山居


powershell:
  1. $s = 'A Counter is a dict subclass for counting hashable objects. It is an unordered collection where elements are stored as dictionary keys and their counts are stored as dictionary values. Counts are allowed to be any integer value including zero or negative counts. The Counter class is similar to bags or multisets in other languages.'

  2. [char[]]$s | group-object | sort-object -desc count|select-object -first 5
复制代码
极限压缩后的代码长度和你差不多:
  1. ([char[]]$s|group|sort *)[-1..-5]
复制代码
发表于 2015-10-21 20:13:03 | 显示全部楼层
吐槽,能不设置成作者可见吗
发表于 2015-10-21 20:15:13 | 显示全部楼层
回复 7# CrLf


    这帖子被设置作者可见了,你说啥我都看不到。
发表于 2015-10-21 20:47:58 | 显示全部楼层
回复 9# 依山居


    done
发表于 2015-10-21 20:55:30 | 显示全部楼层
回复 10# CrLf


    你开了好多技能树。。
发表于 2015-10-21 20:58:49 | 显示全部楼层
回复 11# 依山居


    所以把技能点用光了
发表于 2016-8-16 17:35:37 | 显示全部楼层
第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. #*&cls&@gawk -f "%~f0" "文本.txt">con&pause&exit
  2. {
  3.     gsub(/[[:space:]]/,"");
  4.     for(i=1;i<=length($0);i++)a[substr($0,i,1)]++;
  5. }
  6. END{
  7.     for(b in a){
  8.         if(c[a[b]]){
  9.             c[a[b]]=c[a[b]]" "b;
  10.         }else{
  11.             c[a[b]]=""b;
  12.             d[a[b]]=a[b];
  13.         }
  14.     }
  15.     for(i=asort(d);i>0;i--)print d[i]":"c[d[i]];
  16. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:10 , Processed in 0.024431 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表