[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]如何用批处理命令从文本中取出想要的行?

如何去掉重复的行

问题:
          现有一个文本文件1.txt,路径c:\,里面有N行其中有的行是重复的,文本内容如下:
          apple
          johnson
           johnson^^
           johnson^^
我用什么命令可以取出含有"^^"的行,且该行如果重复的话只出现一次。

[ 本帖最后由 johnson3333 于 2009-6-18 11:50 编辑 ]
2

评分人数

    • 随风: 感谢主动给标题加上 以解决 字样PB + 2
    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

  1. @echo off
  2. (
  3.   for /f "delims=" %%a in ('findstr /c:"^^" c:\a.txt') do (
  4.     if not defined %%a set %%a= & echo;%%a
  5.   )
  6. )>a_.txt
  7. start a_.txt
复制代码
1

评分人数

TOP

回复 2楼 的帖子

非常感谢您的回复,我想再请教下,如果每行前面有空格的话要怎么做才行呢?

TOP

回复 3楼 的帖子

输出的时候要去掉字符前的空格?
还是比较重复行时先去掉前面的空格再比较,输出时保留前面的空格?

TOP

回复 4楼 的帖子

感谢您的关注,这个批处理在字符前面有空格的时候就没办法不取重复的行了
能在字符前面有空格的时候取出不重复的行就好了如: johnson
     apple
     john son^^
     johnson^^
     johnson^^
     john son^^
得出结果:
    john son^^
    johnson^^
    johnson^^
    john son^^非常感谢你~~

[ 本帖最后由 johnson3333 于 2009-6-17 17:48 编辑 ]

TOP

回复 5楼 的帖子

改成这样:
  1. @echo off
  2. (
  3.   for /f "eol=▓ delims=" %%a in ('findstr /c:"^^" a.txt') do (
  4.     if not defined #%%a set #%%a= & echo;%%a
  5.   )
  6. )>a_.txt
  7. start a_.txt
复制代码
1

评分人数

TOP

这个▓ 是什么?怎么打出来?现在已经可以了,老兄你真强,我看都看不懂,你给我推荐下学习bat的教程好么?非常感谢。

TOP

▓可以换成别的不常用的字符,作用是一样的!
有一种爱叫放弃

TOP

eol=▓ 是忽略以 开头的行,默认是 eol=;。可以用 alt+9619(小键盘)打出这个字符。



推荐:

http://bbs.verybat.org/thread-1192-1-1.html

CMD/DOS下符号的作用参考 http://www.cn-dos.net/forum/viewthread.php?tid=30985

什么情况下该使用变量延迟? http://www.cn-dos.net/forum/viewthread.php?tid=20733
简析环境变量和变量延迟特殊字符以及中介法的微妙关系 http://www.cn-dos.net/forum/viewthread.php?tid=30884

[ 本帖最后由 tireless 于 2009-6-17 23:00 编辑 ]

TOP

回复 9楼 的帖子

非常感激~~谢谢你,我把你的代码贴到其他地方去了,注明了作者是你,这个代码能帮到很多人。

TOP

re 楼主
问题解决了,可以把标题加上 [以解决] 字样吗?
技术问题请到论坛发帖求助!

TOP

tireless兄,我看了你的2楼和6楼的代码,我发现两个代码除了eol=▓不同,还有就是给%%a前加了个#号,正因为此处加了#号,6楼的代码就可以去掉重复的行,而2楼的就不行。

我仔细研究后,发现是因为a.txt中的文本含有^^的行前面有空格导致的,要是把含有^^的行的前面的空格去掉,2楼的代码也可以去掉重复行。

这点让我很不明白,为什么空格会影响结果,其中缘由望tireless兄赐教!
(*^_^*)

TOP

回复 12楼 的帖子

if  defined str
上句,是判断 str 是否被定义,那么如果要判断 空格空格空格str 呢?该如何?
if defined         str  这样吗?肯定是不行的,但是给他加个前缀就ok了
if defined #      str 当然这只是个例子便于理解,实际中defined 不能这样用空格,具体的有分析过,搜索 defined 。
技术问题请到论坛发帖求助!

TOP

下面这个例子能说明问题:
set a=b
set         a=b
set #        a=b
前两句其实都是一样的。加再多的空格还是相当于set a=b, 针对楼主的帖子来说。行前面带没带空格就不能够区分开了。
第三句加个#就不一样了,它变为另一个变量"#        a“了。就可以区分开了

TOP

感谢随风兄和inittab兄,已经明白了!
(*^_^*)

TOP

返回列表