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

[问题求助] [已解决]Perl删除重复行的时候如何不打乱原有顺序?

[复制链接]
发表于 2011-6-4 08:30:58 | 显示全部楼层 |阅读模式
本帖最后由 CUer 于 2011-6-5 22:44 编辑

原文件a.txt:
  1. aaa
  2. bbb
  3. aaa
  4. aaa
  5. ccc
  6. ddd
  7. bbb
  8. ddd
复制代码
希望得到的b.txt:
  1. aaa
  2. bbb
  3. ccc
  4. ddd
复制代码
这个代码虽然可以删除重复行,但是把顺打乱了:
  1. use strict;
  2. use warnings;
  3. open(IN,"a.txt");
  4. my %list;
  5. while (<IN>) {
  6.     $list{$_}++;
  7. }
  8. close IN;
  9. open(OUT,">b.txt");
  10. foreach (keys %list) {
  11.     print OUT;
  12. }
  13. close OUT;
复制代码

评分

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

查看全部评分

发表于 2011-6-5 00:01:41 | 显示全部楼层
  1. use strict;
  2. use warnings;
  3. open(IN,"a.txt");
  4. open(OUT,">b.txt");
  5. my %hash = ();
  6. while (<IN>) {
  7.     if (!$hash{$_}) {
  8.         print OUT;
  9.         $hash{$_} = 1;
  10.     }
  11. }
  12. close IN;
  13. close OUT;
复制代码
发表于 2011-6-5 00:02:24 | 显示全部楼层
  1. perl -ane "if(++$a{$_}==1){print}" a.txt >b.txt
复制代码
发表于 2011-6-6 12:37:49 | 显示全部楼层
-ane是什么意思?
发表于 2011-6-6 21:35:26 | 显示全部楼层
4# DAIC


Perl命令行应用介绍
http://bbs.bathome.net/thread-12716-1-1.html
发表于 2011-6-7 00:17:44 | 显示全部楼层

  1. use strict;
  2. use warnings;
  3. my %hash;
  4. while (<DATA>) {
  5.     if (!$hash{$_}) {
  6.         print;
  7.       $hash{$_} += 1;
  8.     }
  9. }
  10. __DATA__
  11. aaa
  12. bbb
  13. aaa
  14. aaa
  15. ccc
  16. ddd
  17. bbb
  18. ddd
复制代码
为什么结果是:

  1. aaa
  2. bbb
  3. ccc
  4. ddd
  5. ddd
复制代码
不知道什么原因?
发表于 2011-6-7 00:33:05 | 显示全部楼层
6# sxw


最后一行ddd行尾的空格删掉,下面在加一个空行即可。
发表于 2011-6-7 09:58:08 | 显示全部楼层
7# Batcher
恩,还真是这样的。哈哈,版主我是这样理解的,表述不太好,不知道对不对:
(1) 【ddd】和【ddd+空格】 在$_看来是不同的,所以打印出来会出现2次ddd,其实他们不一样,第一次是【ddd】,第二次是【dd+空格】
(2)至于为什么要在最后一行ddd后加上另一行,是为了给其增加一个换行符,这样两处的ddd就完全一样了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:21 , Processed in 0.020175 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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