Board logo

标题: [文本处理] [已解决]批处理如何将批量质检记录格式文本,统计每个文本指定字符列出现次数。 [打印本页]

作者: a000000_82    时间: 2013-7-31 18:41     标题: [已解决]批处理如何将批量质检记录格式文本,统计每个文本指定字符列出现次数。

本帖最后由 a000000_82 于 2013-7-31 19:47 编辑

文本数量0001.txt~9xxx.txt

如3524.txt内容为:

07a★☆☆★☆★☆☆★★★★★☆☆★☆☆☆★☆★★☆☆★☆★☆★☆☆★☆★☆☆★☆★☆★☆
18b★☆★★★★☆☆☆☆★★★★☆★☆★★★★★★☆☆★☆☆☆★☆☆☆☆★☆★★☆★★☆☆
22b★☆★★★★☆★★☆★★★☆☆★★★☆★☆★★☆☆★☆☆☆★★☆★☆★☆★★☆☆★☆☆

每个文本行数不变,列数不固定。

需统计列指定字符为:





用以上字符统计所有文本指定字符列出现的次数,

并将统计文本名及出现次数写入(检统.txt)文本。

(检统.txt)文本内容为:

0001.txt:05
2xxx~~~~
3524.txt:02
7xxx~~~~
9xxx.txt:00








望各位大神帮帮忙!!谢谢各位达人~~~
作者: weichenxiehou    时间: 2013-7-31 19:29

本帖最后由 weichenxiehou 于 2013-7-31 19:35 编辑

回复 1# a000000_82
好久没写批了,速度实在是慢啊。
  1. @echo off&setlocal enabledelayedexpansion
  2. (for %%a in (*.txt) do (
  3.   set/a n=0,m=0,total=0
  4.   for /f %%b in ('type %%a') do (
  5.     set/a n+=1
  6.     set line!n!=%%b
  7.   )
  8.   call :check
  9.   echo,%%a:!total!
  10. ))>result.txt
  11. start result.txt
  12. goto :eof
  13. :check
  14. if "!line1:~%m%,1!!line2:~%m%,1!!line3:~%m%,1!"=="★☆☆" set/a total+=1
  15. set/a m+=1
  16. if not "!line1:~%m%,1!"=="" goto :check
复制代码

作者: a000000_82    时间: 2013-7-31 19:45

很好,谢谢weichenxiehou帮忙!
作者: PowerShell    时间: 2013-8-1 14:35

每个文件,只有3行么?
我觉得处理的逻辑,应该首先行列转置,然后搞行搜索。
作者: CrLf    时间: 2013-8-1 16:25

本帖最后由 CrLf 于 2013-8-1 16:34 编辑
  1. sed "s/./&\n/g" ????.txt|sort|uniq -c|findstr "★ ☆"
复制代码
  1. for %%a in (★ ☆) do type *.txt 2>nul|gawk -v RS="%%a" "END{print NR-1,RS}" a.txt|more
复制代码

作者: CrLf    时间: 2013-8-1 17:39

回复 2# weichenxiehou


计算字符串长度,可以看看plp的帖子http://bbs.bathome.net/viewthread.php?tid=11799
拓展下,不在乎效率的话可以简单这样写:
  1. set str=测试123
  2. cmd /u /v /c echo;!str!>a.txt
  3. for %%a in (a.txt) do set /a size=%%~za/2-2
  4. echo %size%
复制代码

作者: weichenxiehou    时间: 2013-8-1 19:41

回复 5# CrLf
呵呵,CRLF最近是不是回帖太多,没有仔细看清题意啊?楼主的意思是三行相同位置的字符的组合满足一定条件的次数。
作者: CrLf    时间: 2013-8-2 16:35

回复 7# weichenxiehou


    汗...按列分割麻烦点:
  1. gawk -F "" "{if(FNR<3){for(i=1;i<=NF;i++)ar[FNR,i]=$i}else{n=0;for(;i--;){if(ar[1,i] ar[2,i] $i==\"★☆☆\")n++};print FILENAME \":\" n}}" *.txt>检统.txt
复制代码





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