标题: [文本处理] [已解决]BAT如何将文本逐行数据相加,的数达到额定值行提取另存? [打印本页]
作者: a000000_82 时间: 2013-8-22 19:44 标题: [已解决]BAT如何将文本逐行数据相加,的数达到额定值行提取另存?
本帖最后由 a000000_82 于 2013-8-23 20:06 编辑
麻烦各位大神帮忙写个批。
条件与内容如下:
“第三季检工号汇总”文件夹内有文本数量0001.txt~9xxx.txt
如0001.txt和9xxx.txt内容为:
(0001.txt)文本内容为:
0001.txt:001,003,001,
0001.txt:005,
0001.txt:005,005,060,
0001.txt:009,000,
0001.txt:003,003,003,003,033
略
(9xxx.txt)文本内容为:
9xxx.txt:008,080,
9xxx.txt:012,xxx,xxx,xxx,xxx.xxx,xxx,xxx,xxx,
9xxx.txt:030,xxx,xxx,xxx,000,015,
9xxx.txt:002,075,
略
每个文本行数1~90不固定,数据列数不固定,单个数值为000,~090,数值不固定。
批处理实现效果为:
额定值设定可调。
设定为45时,也就是单行数据相加后的数为45的行提取出来存入:检工额定\45.txt
如45.txt内容为:
0001.txt:003,003,003,003,033
0999.txt:011,021,013,
9xxx.txt:030,xxx,xxx,xxx,000,015,
略
批的要求说明:
bat、sed、gawk都可以。
请大神帮忙,谢谢~~~
作者: terse 时间: 2013-8-22 23:40
- @echo off&setlocal enabledelayedexpansion
- set files=检工额定
- pushd "D:\第三季检工号汇总\"
- md "%files%" 2>nul
- set m=45
- (for %%i in (*.txt) do (
- for /f "tokens=2 delims=:" %%j in (%%i) do (
- for /f "tokens=* delims=,0" %%k in ("%%j") do set str=%%k
- for /L %%k in (1,1,2) do set "str=!str:,0=,!"
- set /a "n=!str:,=+!+0"
- if !n! equ %m% echo %%i:%%j
- )
- ))>"%files%\%m%.txt"
- popd
- pause
复制代码
作者: a000000_82 时间: 2013-8-23 11:41
谢谢terse !!
经测用冒号前的(1.txt:000,)没能原样显示,另请帮忙把该批改成能同时提取4~5个指定值。
谢谢~~
作者: apang 时间: 2013-8-23 12:40
- @echo off&setlocal enabledelayedexpansion
- for %%a in (5,45,80,30,160) do set ".%%a=1"
- md "D:\检工额定\" 2>nul
- pushd "D:\第三季检工号汇总\"
- for %%i in (*.txt) do (
- for /f "tokens=1,2 delims=:" %%a in (%%i) do (
- set "str=,%%b,"
- for /l %%c in (1,1,2) do set "str=!str:,0=,!"
- set /a "n=0!str:,=+!0"
- if defined .!n! >>"D:\检工额定\!n!.txt" echo,%%a:%%b
- )
- )
- pause
复制代码
作者: terse 时间: 2013-8-23 14:32
回复 3# a000000_82
这里冒号前内容是否和文件名不一致 我在这里是取文件名
作者: a000000_82 时间: 2013-8-23 20:05
谢谢terse 、apang !
两个批都很好用,裹心感谢两位达人~~~~。
terse的评分明天补上。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |