![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 01:23 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]用批处理实现滤除文本中的重复行 |
| 可打印版本 1,202 / 9 |
| 第1楼 zxone | 发表于 2008-04-04 20:54 |
| 初级用户 发帖 13 积分 38 | |
|
[求助]用批处理实现滤除文本中的重复行 我想用批处理实现滤除文本中的重复行,使每行文本都是唯一的。
例如: 1.txt——源文件 1 1 1 2 2 3 4 5 5 5 6 6 7 7 8 8 9 0 2.txt——目标文件 1 2 3 4 5 6 7 8 9 0 首先是用for命令 for /f %a in (1.txt) do …… >>2.txt 接着用if和find配合实现 我的想法是用if命令判断find /c "%a" 2.txt的返回结果,以确认for命令读取的当前行是否已在2.txt文件中出现过,也就是说该行是重复行,但是if命令不大熟悉,如何用if和其它命令搭配实现判断,想借这一实例来学习不死一下。 同时问一下,它能够处理比较复杂的文本行吗,比如网址之类的。(其实,我本来就是想用它来处理文本中重复的网址的)。 使用find /c "1" 1.txt命令的返回结果 ---------- 1.TXT: 3 注意1.txt及3前面的空字符,它们不是空格,用UE查看像是“_”下划线,我想是哪个控制字符吧,因此不能使用for /f “delims=1,2,3”的命令,该怎么办以及为什么用控制字符呢? |
|
| 第2楼 Climbing | 发表于 2008-04-04 21:39 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
用find命令是不行的,假设有这样两行:
123 12 用find就搞不定了,这个得用findstr。你的思路基本上是正确的。 |
|
| 第3楼 ngd | 发表于 2008-04-04 22:51 |
| 中级用户 发帖 108 积分 312 | |
|
LZ的方法是正确的,但其实没必要那么麻烦,换个思路来做更简单
或者使用外部工具sed [ Last edited by ngd on 2008-4-13 at 01:15 PM ] |
|
| 第4楼 zxone | 发表于 2008-04-06 12:06 |
| 初级用户 发帖 13 积分 38 | |
|
回去又重新想了想,原来是昨天把for命令使用错了,应该是tokens=1.2.3,我错写成delims了,find 的回显---------- 1.TXT: 3之间是空格。下面的代码可以实现
type nul>22.txt&&for /f %a in (5.txt) do @for /f "tokens=1,2,3" %i in ('find /c "%a" 22.txt') do @if %k ==0 echo %a>>22.txt看了2楼的提醒,的确稍微复杂一点的find 命令实现不了,可用findstr命令。 唯一的问题是,for命令在读取一行文本时,遇到空格就停止,转读下行文本了,所以对于有空格的比较文本不能使用这行命令,各位分析一下。 |
|
| 第5楼 zxone | 发表于 2008-04-06 12:47 |
| 初级用户 发帖 13 积分 38 | |
|
虽然处理for 命令的读取行遇空格停止的问题可用for /f "delims=" ……解决,但还有一些细节问题,思考ing……
|
|
| 第6楼 flyingphf | 发表于 2008-04-10 17:30 |
| 中级用户 发帖 142 积分 392 | |
|
这个 SED命令对网页不起效果
|
|
| 第7楼 flyingphf | 发表于 2008-04-10 18:07 |
| 中级用户 发帖 142 积分 392 | |
|
说错了,是对中文不起效果
|
|
| 第8楼 vkill | 发表于 2008-04-10 20:44 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
3楼兄弟发的没有看懂
|
|
| 第9楼 flyingphf | 发表于 2008-04-21 12:30 |
| 中级用户 发帖 142 积分 392 | |
|
sed -n "G;s/\n/&&/;/^\([ -~]*\n\).*\n\1/d; s/\n//;h;P" 1.txt
试过了,这个对含有中文字符的不起作用啊 |
|
| 第10楼 ngd | 发表于 2008-06-19 14:06 |
| 中级用户 发帖 108 积分 312 | |
Originally posted by flyingphf at 2008-4-10 18:07: 晕 ~_~ sed有何不可 将正则稍作改动不就可以了 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |