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

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

本帖最后由 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;
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

7# Batcher
恩,还真是这样的。哈哈,版主我是这样理解的,表述不太好,不知道对不对:
(1) 【ddd】和【ddd+空格】 在$_看来是不同的,所以打印出来会出现2次ddd,其实他们不一样,第一次是【ddd】,第二次是【dd+空格】
(2)至于为什么要在最后一行ddd后加上另一行,是为了给其增加一个换行符,这样两处的ddd就完全一样了

TOP

6# sxw


最后一行ddd行尾的空格删掉,下面在加一个空行即可。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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
复制代码
不知道什么原因?

TOP

4# DAIC


Perl命令行应用介绍
http://bbs.bathome.net/thread-12716-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

-ane是什么意思?

TOP

  1. perl -ane "if(++$a{$_}==1){print}" a.txt >b.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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;
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表