标题: [问题求助] [已解决]Perl删除重复行的时候如何不打乱原有顺序? [打印本页]
作者: CUer 时间: 2011-6-4 08:30 标题: [已解决]Perl删除重复行的时候如何不打乱原有顺序?
本帖最后由 CUer 于 2011-6-5 22:44 编辑
原文件a.txt:- aaa
- bbb
- aaa
- aaa
- ccc
- ddd
- bbb
- ddd
复制代码
希望得到的b.txt:复制代码
这个代码虽然可以删除重复行,但是把顺打乱了:- use strict;
- use warnings;
- open(IN,"a.txt");
- my %list;
- while (<IN>) {
- $list{$_}++;
- }
- close IN;
- open(OUT,">b.txt");
- foreach (keys %list) {
- print OUT;
- }
- close OUT;
复制代码
作者: Batcher 时间: 2011-6-5 00:01
- use strict;
- use warnings;
- open(IN,"a.txt");
- open(OUT,">b.txt");
- my %hash = ();
- while (<IN>) {
- if (!$hash{$_}) {
- print OUT;
- $hash{$_} = 1;
- }
- }
- close IN;
- close OUT;
复制代码
作者: Batcher 时间: 2011-6-5 00:02
- perl -ane "if(++$a{$_}==1){print}" a.txt >b.txt
复制代码
作者: DAIC 时间: 2011-6-6 12:37
-ane是什么意思?
作者: Batcher 时间: 2011-6-6 21:35
4# DAIC
Perl命令行应用介绍
http://bbs.bathome.net/thread-12716-1-1.html
作者: sxw 时间: 2011-6-7 00:17
- use strict;
- use warnings;
- my %hash;
- while (<DATA>) {
- if (!$hash{$_}) {
- print;
- $hash{$_} += 1;
- }
- }
- __DATA__
- aaa
- bbb
- aaa
- aaa
- ccc
- ddd
- bbb
- ddd
复制代码
为什么结果是:复制代码
不知道什么原因?
作者: Batcher 时间: 2011-6-7 00:33
6# sxw
最后一行ddd行尾的空格删掉,下面在加一个空行即可。
作者: sxw 时间: 2011-6-7 09:58
7# Batcher
恩,还真是这样的。哈哈,版主我是这样理解的,表述不太好,不知道对不对:
(1) 【ddd】和【ddd+空格】 在$_看来是不同的,所以打印出来会出现2次ddd,其实他们不一样,第一次是【ddd】,第二次是【dd+空格】
(2)至于为什么要在最后一行ddd后加上另一行,是为了给其增加一个换行符,这样两处的ddd就完全一样了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |