[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样把文本中整数做统计并按频率排序

文本中全是数字,毎行就是:01 02 03 04 05 06这样的格式,有很多行,人工统计慢易出错,哪位大大写个脚本,谢谢!
  1. 01 02 03 05 06 23
  2. 01 02 03 05 06 28
  3. 01 02 03 05 06 30
  4. 01 02 03 05 07 08
  5. 01 02 03 05 07 09
  6. 01 02 03 05 07 10
  7. 01 02 03 05 07 11
  8. 01 02 03 05 07 12
  9. 01 02 03 05 07 13
  10. 01 02 03 05 07 14
  11. 01 02 03 05 07 15
  12. 01 02 03 05 07 16
  13. 01 02 03 05 07 17
  14. 01 02 03 05 07 18
  15. 01 02 03 05 07 19
  16. 01 02 03 05 07 20
  17. 01 02 03 05 07 21
  18. 01 02 03 05 07 22
  19. 01 02 03 05 07 24
  20. 01 02 03 05 07 25
复制代码
上面的数以整数50以下的话想得到这样的样式
  1. 共00次:04,26,27,29,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,
  2. 共01次:08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,28,30,
  3. 共03次:06,
  4. 共17次:07,
  5. 共20次:01,02,03,05,
复制代码

回复 1# hkldd


    请给出10行左右的原始数据作为测试样例,并给出对于这份测试样例希望得到的完整结果。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

数字统计?
  1. @echo off
  2. set "txt=0.txt"
  3. powershell -c "(Get-Content '%txt%' |  Out-String ) -split '\s+' | Group-Object {$_} | Sort-Object Count | Group-Object {$_.Count}  | foreach { Write-Host ('共{0:d2}次: {1}' -f [int]$_.Name,(($_.Group.Name | Sort-Object | Out-String) -replace '\s+',','))}"
  4. pause&exit
复制代码

TOP

你好大侠!运行后截图如下:

只有次数,没有对应的数字,麻烦你得闲看一下,谢谢!

TOP

回复 4# hkldd win10测试正常 更新下powershell

TOP

回复 4# hkldd
兼容win7
  1. @echo off
  2. set "txt=0.txt"
  3. powershell -version 2.0 -c "$txt='%txt%';Get-Content '%~0' | Select-Object -Skip 4 | Out-String | Invoke-Expression"
  4. pause&exit
  5. $datas=(Get-Content '0.txt' |  Out-String ) -split '\s+';
  6. $s1=(1..50 | Where-Object {$datas -notcontains ('{0:d2}' -f $_)} | foreach {'{0:d2}' -f $_} | Out-String)
  7. $s1=$s1 -replace '\s+',','
  8. Write-Host ('共{0:d2}次: {1}' -f [int]0,$s1)
  9. $datas | Group-Object {$_} |
  10.     Sort-Object Count | Group-Object Count |
  11.         foreach {
  12.             $str=($_.Group | Sort-Object {$_.Name} | Select-Object Name | Out-String ) -replace 'Name|-+|\s+',',' -replace ',{2,}',''
  13.             Write-Host ('共{0:d2}次: {1}' -f [int]$_.Name,$str)
  14.         }
复制代码

TOP

完美解决!谢谢大侠

TOP

  1. gawk '{for(i=1;i<=NF;i++){a[$i] = ($i in a) ? a[$i]+=1 : a[$i]=1}}END{for(i in a)print i,a[i]}' txt
复制代码

TOP

返回列表