标题: [文本处理] [已解决]批处理如何剪切特定文本内容到新的文本中? [打印本页]
作者: xslxslxsl 时间: 2011-9-17 09:50 标题: [已解决]批处理如何剪切特定文本内容到新的文本中?
现有一个文件夹中有多个以ABC开头的文本文件(ABC1.TXT,ABC2.TXT......),文本的结构相同,下面数据中的空格实际上已TAB键分隔
1good 34good6 7good79 good3
66 7 8 9 9 111
888 7 good 4 0 8
- bgood 6t 11 33 6
- b c 6good79 i1
good FF 3 7
33good5 6 9 9
9-8
9 0
good79
good 66 8 8 90 768
将第五列的数据进行比较,若为9或者无内容,则将整行剪切出去,另存为新的文本,新的文件名是旧的的文件名_1即可(如ABC1.TXT->ABC1_1.TXT),麻烦高手具体指点,不胜感激。
作者: 冷玉公子 时间: 2011-9-17 10:59
没有明白你的意思,剪切?
你的新文件里是想要- 1good 34good6 7good79 good3
- 888 7 good 4 0 8
- - bgood 6t 11 33 6
- - b c 6good79 i1
- good FF 3 7
- 33good5 6 9 9
- 9-8
- 9 0
- good79
- good 66 8 8 90 768
复制代码
还是想要复制代码
问题要说清楚,要不大家很难帮你的哦。
作者: xslxslxsl 时间: 2011-9-17 15:28
回复 2# 冷玉公子
将第五列数值为9或者为空的行剪切出去,及新文本内容为
1good 34good6 7good79 good3
66 7 8 9 9 111
33good5 6 9 9
9-8
9 0
good79
作者: xslxslxsl 时间: 2011-9-17 15:53
我现在只知道复制出去
作者: ArdentMan 时间: 2011-9-17 16:21
本帖最后由 ArdentMan 于 2011-9-17 16:28 编辑
- @Echo Off
- For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
- For /F "delims=" %%b In (%%a) Do (
- For /F "tokens=5" %%c in ("%%b") Do (
- If "%%c" EQU "9" Set "Flag=a"
- If "%%c" EQU "" Set "Flag=a"
- )
- If Defined Flag (
- Echo %%b>>%%~na_1.txt&Set "Flag="
- ) Else (
- Echo %%b>>$
- )
- )
- Move $ %%a
- )
复制代码
作者: xslxslxsl 时间: 2011-9-17 17:48
回复 5# ArdentMan 谢谢,但是结果不对。
作者: ArdentMan 时间: 2011-9-17 18:03
回复 6# xslxslxsl
请具体描述一下,好修改代码
作者: xslxslxsl 时间: 2011-9-17 18:20
我是用fr ABC1.txt -r:"^.*\t.*\t.*\t.*\t9?\t.*\n?" -t -stdout > ABC1_1.txt 将第五列不为9或空的输出到新文件中,但是我就是不会将原文件中提出来的那些给删除掉,也就是留取第五列为9或空的内容,望高手指点。
作者: ArdentMan 时间: 2011-9-17 18:56
请仔细看你顶楼的描述吧
什么叫剪切?
既然是不删除更容易了:- @Echo Off
- For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
- (For /F "delims=" %%b In (%%a) Do (
- For /F "tokens=5" %%c in ("%%b") Do (
- If "%%c" EQU "9" Echo %%b
- If "%%c" EQU "" Echo %%b
- )
- ))>%%~na_1.txt
- )
复制代码
作者: xslxslxsl 时间: 2011-9-17 20:15
回复 7# ArdentMan
首先我还是很感谢你的回复及帮助,我的文本文件共六列,每列之间用TAB键进行分隔,现在要判断第五列的数据情况,若为9或者为空的就将该行剪切出去形成一个新的文本,但是根据你的代码仅仅剪切出了66 7 8 9 9 111此行,还有几行符合条件,但是没有剪切出来,现在我将文本的例子放上来,谢谢。
作者: Batcher 时间: 2011-9-17 20:23
回复 10# xslxslxsl
以后求助时,尽量在顶楼就给出这样的测试数据。
作者: xslxslxsl 时间: 2011-9-17 20:26
本帖最后由 xslxslxsl 于 2011-9-17 22:05 编辑
回复 11# Batcher
是的,记住了,起初是打算放上来的,可是添加附件总是提示错误,不知道是什么原因。
附件放上来了,请大家看看,帮忙解决。
作者: ArdentMan 时间: 2011-9-17 22:15
代码重新修改如下,请及时反馈~~~- @Echo Off&SetLocal EnableDelayedExpansion
- Rem 请将下面的Tab变量的值替换为实际的制表符
- Set "Tab= "
- For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
- (For /F "delims=" %%b In (%%a) Do (
- Set "Str=%%b"&Set "Str=!Str:%Tab%= @#$!"
- For /F "tokens=5" %%c in ("!Str!") Do (
- If "%%c" EQU "@#$9" Echo %%b
- If "%%c" EQU "@#$" Echo %%b
- )
- ))>%%~na_1.txt
- )
复制代码
作者: xslxslxsl 时间: 2011-9-17 23:13
本帖最后由 xslxslxsl 于 2011-9-17 23:21 编辑
回复 13# ArdentMan
谢谢,经过测试 9 0与 9-8此两行数据不能成功复制出去哦,不知道为什么
作者: ArdentMan 时间: 2011-9-17 23:31
应该是此列中有空格存在~~~
作者: ArdentMan 时间: 2011-9-17 23:33
如果文本中没有@这个特殊字符存在的话代码可以将代码再修改如下:- @Echo Off&SetLocal EnableDelayedExpansion
- Rem 请将下面的Tab变量的值替换为实际的制表符
- Set "Tab= "
- For /F "delims=" %%a In ('Dir /b ABC*.txt') Do (
- (For /F "delims=" %%b In (%%a) Do (
- Set "Str=%%b"&Set "Str=!Str:%Tab%=@#$!"
- For /F "tokens=5 delims=@" %%c in ("!Str!") Do (
- If "%%c" EQU "#$9" Echo %%b
- If "%%c" EQU "#$" Echo %%b
- )
- ))>%%~na_1.txt
- )
复制代码
作者: xslxslxsl 时间: 2011-9-18 10:03
回复 15# ArdentMan
谢谢你,经过检查,没有空格就是几个TAB键。不管如何我还是非常感谢你。
作者: ArdentMan 时间: 2011-9-18 10:37
回复 17# xslxslxsl
那问题解决了不?
作者: xslxslxsl 时间: 2011-9-18 11:55
回复 18# ArdentMan
呵呵是的,还是没有解决,其实我以前是用我是用fr ABC1.txt -r:"^.*\t.*\t.*\t.*\t9?\t.*\n?" -t 将文本中第五列为9或空的行直接在原文件中删除,要么fr ABC1.txt -r:"^.*\t.*\t.*\t.*\t9?\t.*\n?" -t -stdout > ABC1_1.txt 将第五列不为9或空的输出到新文件中,原文件不修改。现在我想将原文件中为9或空的提取出来,就是不知道如何实现,FR的参数我看了看好像没有,我想应该是有的吧,但是就是自己没有发现。再次,感谢你的帮助哦。
作者: awk 时间: 2011-9-18 21:35
回复 19# xslxslxsl - gawk -F "\t" "{if($5==9 || $5==\"\")print}" a.txt >b.txt
复制代码
作者: xslxslxsl 时间: 2011-9-19 09:27
回复 20# awk
谢谢你的帮助,能够实现特定文本的复制操作,那剪切如何书写批处理呢,谢谢指点。
作者: awk 时间: 2011-9-19 21:18
回复 21# xslxslxsl - @echo off
- gawk -F "\t" "{if($5==9 || $5==\"\")print}" a.txt >b.txt
- findstr /x /v /g:b.txt a.txt >c.txt
- move c.txt a.txt
复制代码
作者: xslxslxsl 时间: 2011-9-19 23:49 标题: RE: 批处理如何剪切特定的文本内容到新的文本中?
回复 22# awk
原来FINDSTR 的G是这样用的啊,纠结我这么久的问题解决了,又学习到了,问题解决,谢谢指点,AWK真是厉害啊,同时再次感谢ArdentMan等人对我及时的关注和帮助 ,谢谢你们的帮助。看到我与你们的差距,我要抓紧好好学习才行啊。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |