【发布时间】:2013-12-27 16:18:33
【问题描述】:
我有一个这样的纯文本文件:
...
... TYPE: alm01, ........
...
...
...
... TYPE: almBB, ........
...
...
... TYPE: out, ......
...
... TYPE: in, ......
... TYPE: almBB, ........
... TYPE: out, ......
... TYPE: out, ......
(省略号是一行中的东西)
所以使用批处理文件或cmd命令(必要时使用管道)我想统计并输出每种类型的出现次数,从上面的示例中,我想输出:
alm01 1
almBB 2
out 3
in 1
我该怎么做?
第一次尝试:(不工作)
@echo off
setlocal enableextensions enabledelayedexpansion
rem Configuration
set "file=test.log"
rem Clean environment
for /f "tokens=1 delims==" %%v in ('set _type_ 2^>nul') do set "%%v="
rem Search required lines
for /f "tokens=*" %%l in ('findstr "TYPE:" "%file%"') do (
rem Now we have the whole line
set "t=%%l"
rem Remove the prefix of the line
set "t=%t:*TYPE: =%"
set "t=%t:~1%"
rem Remove the suffix of the line (from comma to end) and
rem increment counter of type
for /f "tokens=1 delims=," %%t in ('echo %t%') do set /a "_type_%%t+=1"
)
rem Enumerate find types and echo type and number of occurrences
rem The inner loop is to allow underscores inside type
for /f "tokens=1,* delims=_" %%a in ('set _type_ 2^>nul') do (
for /f "tokens=1,2 delims==" %%v in ("%%a") do echo %%v %%w
)
rem Clean and exit
endlocal
exit /b
【问题讨论】:
-
这在 bash 中很容易。 MS-DOS是指pre-Win32系统,还是只是命令提示符(cmd.exe)?
-
是的,V-X 的问题很关键。你真的是说 MS-DOS 批处理吗?还是您正在使用 Windows 批处理? MS-DOS 功能受到更多限制。
-
@dbenham 我想用一个 bat 文件执行此操作,并从 windows 命令 (cmd) 提示符执行它。
标签: windows batch-file