![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 06:27 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求助:用sed命令提高执行效率 |
| 可打印版本 1,031 / 7 |
| 第1楼 wbshu | 发表于 2007-06-29 11:29 |
| 初级用户 发帖 13 积分 25 | |
|
求助:用sed命令提高执行效率 各位高手,本人想编写一个批处理用于剔除文本文件中相同记录,虽然下面的脚本能够完成任务,但我认为sed命令非常强大,应该能够提高我的脚本效率.本人刚接触sed命令,还请高手指教!!
@echo off set /a num=0 for /f %%i in (test.txt) do set /a num+=1 echo 发现了%num%条记录。 echo. echo 正在剔除相同记录,请稍后...... echo. for /l %%a in (1,1,%num%) do ( sed -n "%%a"p test.txt>temp1.txt rem 提取比较项 for /f "tokens=*" %%i in (temp1.txt) do ( echo %%i>temp2.txt sed "/%%i/d" test.txt>>temp2.txt rem 删除相同项。 这条语句能用嵌套语句吗? type temp2.txt>test.txt ) ) set /a num=0 for /f %%i in (test.txt) do set /a num+=1 echo. echo 保留了%num%条文件记录。 del /f /q temp*.txt |
|
| 第2楼 lxmxn | 发表于 2007-06-29 11:34 |
| 版主 发帖 4,938 积分 11,386 | |
|
举个具体的例子吧。
|
|
| 第3楼 wbshu | 发表于 2007-06-29 11:39 |
| 初级用户 发帖 13 积分 25 | |
|
比如test.txt文件是:
sss bbb ccc eeeeee edd ffff sssss wwwww sss bbb ccc aaa ddd eee 文件里面第一条和第4条相同,我要去掉第4条的记录最后成这样: sss bbb ccc eeeeee edd ffff sssss wwwww aaa ddd eee 如果有两条\三条......相同的话就保留一条记录. |
|
| 第4楼 lxmxn | 发表于 2007-06-29 12:58 |
| 版主 发帖 4,938 积分 11,386 | |
|
gawk:
#Gawk 下载 http://www.cn-dos.net/forum/viewthread.php?tid=31098&page=1#pid205571 |
|
| 第5楼 wbshu | 发表于 2007-06-29 14:06 |
| 初级用户 发帖 13 积分 25 | |
|
谢谢!!!要学的东西真多啊!
|
|
| 第6楼 bjsh | 发表于 2007-06-29 23:23 |
| 银牌会员 发帖 621 积分 2,000 | |
|
这个 问题 用 awk 解决是最合适的选择;
用sed 就比较麻烦了;代码如下; sed -n "G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P" test.txt |
|
| 第7楼 gan2031 | 发表于 2007-06-30 00:20 |
| 新手上路 发帖 1 积分 2 | |
|
谢谢!!! 谢谢!!!
|
|
| 第8楼 wbshu | 发表于 2007-07-01 17:02 |
| 初级用户 发帖 13 积分 25 | |
Originally posted by bjsh at 2007-6-29 11:23 PM: 这条命令好像不适合本例,应该将“^\(*\n\)”参数换成“^\(.*\n\)”: 我试了一下,对于本例而言下面的代码也能达到效果: sed -n "G; /^\(.*\n\).*\n\1/d; h ;P" Test.txt 总之,谢谢你的回复! |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |