找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 86438|回复: 18

[文本处理] [已解决]批处理如何判断文本中以指定字符分割的每一行的指定字段的数据并进行相应处理

[复制链接]
发表于 2011-6-22 22:48:15 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-8-9 23:48 编辑

现有一个文件夹中有多个已ABC开头的文本文件(ABC1.TXT,ABC2.TXT......),文本的结构相同,下面数据中的空格实际上系TAB键,以tab键分隔数据
12 34 56 7 9 23
66 7 8 9 9 111
888 7 65 4 0 8
a b2 6t 11 33 6
a b c 6 9 i1
。。。。。。
将第四个空后的数据进行比较,若为9,则将整行删除,留下的数据另存
888 7 65 4 0 8
a b2 6t 11 33 6
。。。。。。
(即对文本数据中的第五列数据进行判断,若为9就将此行删除)
麻烦高手具体指点,不胜感激。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-6-22 23:14:11 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-6-22 23:15 编辑
  1. sed -i "/^.*\t\+.*\t\+.*\t\+.*\t\+9\t\+/d" *.txt
复制代码
sed.exe 4.1.4 下载:
http://bbs.bathome.net/thread-1114-1-1.html
发表于 2011-6-23 00:04:01 | 显示全部楼层
  1. gawk "$5!=9" a.txt | more >b.txt
复制代码
http://bbs.bathome.net/thread-1114-1-1.html
 楼主| 发表于 2011-6-23 00:43:11 | 显示全部楼层
首先感谢楼上的高手辛苦指点,但是sed 的语法上我不是很理解,最好解释一下,谢谢,
gawk 基本上可以看懂,但是它生成的B.TXT中的数据间的分隔符变成空格了,原来是TAB键,望高手再指点一二。
继续等候中,谢谢!
发表于 2011-6-23 00:53:58 | 显示全部楼层
  1. gawk "$5!=9" a.txt >b.txt
复制代码
发表于 2011-6-23 10:45:58 | 显示全部楼层
本帖最后由 tmplinshi 于 2011-6-23 10:55 编辑
sed -i "/^.*\t\+.*\t\+.*\t\+.*\t\+9\t\+/d" *.txt

-i         直接修改文件
^         从行的开头匹配
.*        零个或零个以上任意字符
\t\+     一个或一个以上 tab 符号
d         删除匹配的行

解释完后才发现,会删除这样的行:
[Tab][Tab][Tab][Tab]9[Tab][Tab]

换成这样就不会:
  1. sed -i "/^.\+\t\+.\+\t\+.\+\t\+.\+\t\+9\t\+/d" *.txt
复制代码
发表于 2011-6-23 11:19:11 | 显示全部楼层
findstr /v
发表于 2011-6-23 11:32:50 | 显示全部楼层

  1. @ECHO OFF
  2. For /f "delims=" %%a in ('dir /a-d /b abc*.txt') do (
  3.     (For /f "usebackq delims=" %%b in ("%%a") do (
  4.         For /f "tokens=5" %%c in ("%%b") do if %%c neq 9 echo %%b
  5.     ))>~tem
  6.     move ~tem "%%a"
  7. )
  8. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-6-23 22:08:55 | 显示全部楼层
谢谢大家的指点,但是
12        34        56        7        9        23
66        7        8        9        9        111
888        7        65        4        0        8
a        b2        6t        11        33        6       
a        b        c        6        9        i1
2                FF        3        7       
        33        55        6        9        9
                                        98
                                9        0
                                9       
55        66        8        8        90        768
这样的文本处理就有问题了,望高手继续指点,谢谢!
发表于 2011-6-23 22:17:03 | 显示全部楼层
9# xslxslxsl


看不出有多少个 tab,要么把 tab 换成其他字符,要么上传附件;
还有,贴一下要处理成什么结果。
 楼主| 发表于 2011-6-23 22:20:44 | 显示全部楼层
12        34        56        7        9        23
66        7        8        9        9        111
888        7        65        4        0        8
a        b2        6t        11        33        6       
a        b        c        6        9        i1
2                FF        3        7       
        33        55        6        9        9
                                        98
                                9        0
                                9       
55        66        8        8        90        768

这样的文本处理就有问题了,麻烦高手指点,谢谢!
发表于 2011-6-23 22:43:45 | 显示全部楼层
本帖最后由 zm900612 于 2011-6-23 22:48 编辑
  1. @echo off
  2. for /f "tokens=1*delims=:" %%a in ('
  3.    findstr /bvrc:"[0-Z]*[^0-Z][0-Z]*[^0-Z][0-Z]*[^0-Z][0-Z]*[^0-Z]9\>" *.txt^&del /f /q *.txt>nul
  4. ) do echo>>%%a %%b
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-6-23 23:00:30 | 显示全部楼层
  1. sed -i "/^.*\t.*\t.*\t.*\t9\t/d" ABC*.txt
复制代码
 楼主| 发表于 2011-6-23 23:05:27 | 显示全部楼层
好像,sed -i "/^.*\t\+.*\t\+.*\t\+.*\t\+9\t\+/d" *.txt
还是可以的哦
 楼主| 发表于 2011-6-23 23:12:07 | 显示全部楼层
不好意思,刚才没有刷新页面,没有注意到大家的回复,对不起,我刚才将附件上传了,望大家指点,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 09:55 , Processed in 0.024441 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表