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

[文本处理] 批处理怎样提取一个文本内容里的不重复行并输出?

[复制链接]
发表于 2011-6-5 13:07:04 | 显示全部楼层 |阅读模式
批处理提取一个文本内容里的不重复行并输出,如何实现?
我有一个文本,里面有好多行,要求提取不重复的行,例如
原文本1:
4344
你1好11
4334
222
你1好
4535
不过
天天4
4334
不过
你1好11
处理后并输出的文本2为:
4344
222
你1好
4535
天天4
发表于 2011-6-5 13:20:48 | 显示全部楼层
楼主为什么总是问重复的问题
发表于 2011-6-5 14:06:24 | 显示全部楼层
  1. for /f "delims=" %%i in (1.txt) do (if not defined %%i echo,%%i >>2.txt&set "%%i=a")
复制代码
 楼主| 发表于 2011-6-5 15:23:03 | 显示全部楼层
3# 601997526

答非所问,请仔细看要求
发表于 2011-6-5 15:32:28 | 显示全部楼层
3# 601997526


有逻辑错误
 楼主| 发表于 2011-6-5 15:37:23 | 显示全部楼层
本帖最后由 wh1234567 于 2011-6-5 15:38 编辑

5# zm900612
:2
cls
echo                   过滤文本重复行只提取不相同行
echo.
set /p wb=请输入要处理的[路径]文本:
set /p wb1=请输入处理后生成的[路径]文本:
for /f "delims=" %%i in (%wb%) do (
     if not defined %%i set %%i=A &   echo %%i>>%wb1%
)
echo                     处理完成
ping /n 2 127.0.1 >nul
goto :eof
你帮我修改一下这个代码吧,修改成我标题要求的那种,只提取不相同的行
另外这个代码不支持拖拽,我想修改成支持拖拽的那种
发表于 2011-6-5 16:43:40 | 显示全部楼层
  1. gawk "{a[$0]++}END{for(i in a)if(a[i]==1)print i}" a.txt | more >b.txt
复制代码
 楼主| 发表于 2011-6-5 17:03:37 | 显示全部楼层
7# Batcher


不能用,我没有第三方程序
发表于 2011-6-5 17:10:16 | 显示全部楼层
三个方案:
1、先找出重复行输出到2.txt,然后findstr /x /v /l /g:2.txt 1.txt,若没效果,可以吧/l换成/r
2、为每行计数出现的内容计数,然后查找值为1的行
3、将文本排序,去除相邻的重复行,再恢复原有顺序

论坛里相关旧帖很多,不再贴代码了
发表于 2011-6-5 17:50:33 | 显示全部楼层
3# 601997526

答非所问,请仔细看要求
wh1234567 发表于 2011-6-5 15:23

怎么是答非所问啦,有错误是没写完整,但大至意思还是没错呀
你在循环里把if变量改x再加两句代码不就行了
set x=%%i
set x=
发表于 2011-6-5 17:53:21 | 显示全部楼层
怎么是答非所问啦,有错误是没写完整,但大至意思还是没错呀
你在循环里把if变量改x再加两句代码不就行了
set x=%%i
set x=
601997526 发表于 2011-6-5 17:50


不是笔误,是逻辑错误。
 楼主| 发表于 2011-6-5 18:33:32 | 显示全部楼层
能不能完整一下代码
发表于 2011-6-5 18:36:47 | 显示全部楼层
本帖最后由 chenqldiy 于 2011-6-5 22:06 编辑

这种贴子在论坛有很多,我前几天就问过一次咯,你可以找找我发的贴看看
就楼主的要求,上面的内容没有特殊符号,可以用这个
下面的代码处的效果不是最后结果,你要的话套多一层"!str:%%a=!"=="!str!"

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set str=,
  4. for /f %%i in (1.txt) do (
  5. for /f %%a in (",!i!,") do if "!str:%%a=!"=="!str!" (
  6. set str=,!n!!str!
  7. )
  8. )
  9. for %%a in (!str!) do echo %%a>>2.txt
复制代码
有时候你翻下论坛的资料改下就可以O的了
发表于 2011-6-5 21:14:27 | 显示全部楼层
 楼主| 发表于 2011-6-5 23:03:02 | 显示全部楼层
14# Batcher

用第三方命令有利有弊:可能快速准确处理,但不方便使用,例如不可能每台电脑上都有这个程序还得另外下载,所以能弄成不是第三方的批处理就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:11 , Processed in 0.020423 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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