Board logo

标题: [文本处理] 批处理如何批量统计文本文件里指定数字出现次数? [打印本页]

作者: ysrr2011    时间: 2014-9-28 16:37     标题: 批处理如何批量统计文本文件里指定数字出现次数?

比如要统计文件夹0内每个文本文件中941的各自出现次数,结果存入 “统计.txt”,格式类似于附件即可。请问如何编程?
作者: xxpinqz    时间: 2014-9-28 17:24

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('findstr "\<941\>" *.txt') do (
  3.     set "str=%%~na"
  4.     set /a #!str:+=@!+=1
  5. )
  6. (for /f "tokens=1-2 delims=#=" %%a in ('set #') do (
  7.     set "str=%%a:%%b"
  8.     echo,!str:@=+!
  9. ))>all.txt
复制代码

作者: apang    时间: 2014-9-28 20:23

本帖最后由 apang 于 2014-9-28 20:43 编辑

我也来一下:
  1. @echo off & setlocal enabledelayedexpansion
  2. pushd "0\"
  3. set n=1
  4. (for /f "tokens=1,2 delims=:" %%a in ('findstr "\<941\>" *.txt') do (
  5.         if defined a (
  6.                 if /i "%%~na" NEQ "!a!" (
  7.                         echo,!a!:!n!&set n=1
  8.                 ) else set /a n+=1
  9.         )
  10.         set "a=%%~na"
  11. ))>..\统计.txt
  12. echo,!a!:!n!>>..\统计.txt
  13. pause
复制代码

作者: apang    时间: 2014-9-29 00:00

突然发现 本题用 find 比 findstr 要方便得多
  1. @echo off
  2. pushd "0\"
  3. (for /f "tokens=* delims=- " %%a in ('find /c "941" *.txt') do (
  4.         echo,%%a
  5. ))>"%~dp0统计.txt"
  6. pause
复制代码

作者: CrLf    时间: 2014-9-29 06:15

话说这好像是 grep 的原生格式:
  1. @grep -c "941" *.txt>"%~dp0统计.txt"
复制代码

作者: ysrr2011    时间: 2014-11-9 20:34

本帖最后由 ysrr2011 于 2014-11-10 00:25 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /L %%i in (000,1,999) do (
  3. for /f "delims=" %%a in ('findstr "\<%%i\>" *.txt') do (
  4.     set "str=%%~na"
  5.     set /a #!str:+=@!+=1
  6. )
  7. (for /f "tokens=1 delims=#=" %%a in ('set #') do (
  8.     set "str=%%a“
  9.     echo,!str:@=+!
  10. )))>"统计%%i.txt"
复制代码
如果不需要统计次数,只提取含该数值的文件,
以上程序尝试统计一组数值,执行结果的问题是
1:000-099的数值,无法运算,
2:100-999的数值,可以运算,但只有第一个结果正确,后面的结果会累加上前面的结果一起显示。
请问应该如何解决?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2