perl去除重复内容的脚本代码(重复行+数组重复字段)_应用技巧

假如有这样的一段序列:
1 2 
1 2 
2 1 
1 3 
1 4 
1 5 
4 1
我们需要得到如下的结果:
1 3 
1 5 
2 1 
4 1
那么,请借助以下的perl脚本来实现。

代码一:

复制代码 代码如下:

#!/bin/perl
use strict; 
use warnings; 
my $filename; 
my %hash; 
my @information; 
my $key1; 
my $key2; 
print "please put in the file like this f:\\\\perl\\\\data.txt\n"; 
chomp($filename=<STDIN>); 
open(IN,"$filename")||die("can not open"); 
while(<IN>) 

   chomp; 
   @information=split/\s+/,$_; 
   if(exists $hash{$information[0]}{$information[1]}) 
   { 
       next; 
   } 
   else 
   { 
       $hash{$information[0]}{$information[1]}='A'; 
    } 
   } 
   close IN; 
   open(IN,"$filename")||die("can not open"); 
   while(<IN>) 
   { 
       @information=split/\s+/,$_; 
       if(exists $hash{$information[1]}{$information[0]}) 
       { 
           delete $hash{$information[0]}{$information[1]} 
       } 
       else 
       { 
           next; 
       } 
   } 
   close IN; 
   open(OUT,">f:\\A_B_result.txt")||die("can not open"); 
   foreach $key1 (sort{$a<=>$b} keys %hash) 
   { 
       foreach $key2 (sort{$a<=>$b} keys %{$hash{$key1}}) 
       { 
           print OUT "$key1 $key2\n"; 
       } 
   } 
close OUT;

代码二:

如果有一个文件data有10G大,但是有好多行都是重复的,需要将该文件中重复的行合并为一行,那么我们需要用什么办法来实现
cat data |sort|uniq > new_data #该方法可以实现,但是你需要花上好几个小时。结果才能出来。
下面是一个使用perl脚本来完成此功能的小工具。原理很简单,创建一个hash,每行的内容为键,值由每行出现的次数来填充,脚本如下;

复制代码 代码如下:

#!/usr/bin/perl
# Author :CaoJiangfeng
# Date:2011-09-28
# Version :1.0
use warnings;
use strict;

my %hash;
my $script = $0; # Get the script name

sub usage
{
        printf("Usage:\n");
        printf("perl $script <source_file> <dest_file>\n");

}

# If the number of parameters less than 2 ,exit the script
if ( $#ARGV+1 < 2) {

        &usage;
        exit 0;
}

my $source_file = $ARGV[0]; #File need to remove duplicate rows
my $dest_file = $ARGV[1]; # File after remove duplicates rows

open (FILE,"<$source_file") or die "Cannot open file $!\n";
open (SORTED,">$dest_file") or die "Cannot open file $!\n";

while(defined (my $line = <FILE>))
{
        chomp($line);
        $hash{$line} += 1;
        # print "$line,$hash{$line}\n";
}

foreach my $k (keys %hash) {
        print SORTED "$k,$hash{$k}\n";#改行打印出列和该列出现的次数到目标文件
}
close (FILE);
close (SORTED);

代码三:

通过perl脚本,删除数据组中重复的字段

复制代码 代码如下:

#!/usr/bin/perl
use strict;
my %hash;
my @array = (1..10,5,20,2,3,4,5,5);
#grep 保存符合条件的元素
@array = grep { ++$hash{$_} < 2 } @array;
print join(" ",@array);
print "\n";

时间: 2024-09-20 04:23:08

perl去除重复内容的脚本代码(重复行+数组重复字段)_应用技巧的相关文章

sed删除文件中的一行内容的脚本代码_linux shell

先来看下原始文件的内容: 复制代码 代码如下: root@localhost ~]# cat file.txthello worlda:b:c -h -na:b:c -h -n sed根据条件删除相关的行: 复制代码 代码如下: [root@localhost ~]# sed -i '/a:b:c -h -n/d' file.txt[root@localhost ~]# cat file.txthello world sed根据条件进行相关内容的替换: 复制代码 代码如下: [root@loca

删除DataTable重复列,只删除其中的一列重复行的解决方法_实用技巧

vs2005针对datatable已经有封装好的去重复方法: 复制代码 代码如下: //去掉重复行 DataView dv = table.DefaultView; table = dv.ToTable(true, new string[] { "name", "code" });  此时table 就只有name.code无重复的两行了,如果还需要id值则  table = dv.ToTable(true, new string[] { "id"

在.NET中取得代码行数的方法_实用技巧

文章目的 介绍在.NET中取得代码行数的方法 代码 复制代码 代码如下: [STAThread] static void Main(string[] args) { ReportError("Yay!"); } static private void ReportError(string Message) { StackFrame CallStack = new StackFrame(1, true); Console.Write("Error: " + Messa

Perl操作系统环境变量的脚本代码_perl

如何用Perl脚本操作系统环境变量呢? 想必很多朋友马上就会想到Perl中提供的$ENV这个特殊的哈希变量,对,在$ENV中完全可以获取到一些系统变量.怎么获取呢?比如想要知道Path这个系统环境变量的内容,我们可以通过$ENV{'Path'} 来获取.如果想设置Path这个环境变量呢,哈,使用$ENV{'Path'}='C:\Windows\System32'来设置.想获取所有的环境变量列表也很简单,哈希遍历不就可以了~ 其实,本文中真正想问的是,你在通过上述方法设置了一个环境变量后,右击"我

perl实现blog备份的脚本代码_perl

之前总不重视自己的博客,上回一丢才心疼,现在重视起来,决定定期备份sql.写个小脚本如下: 复制代码 代码如下: #!/usr/bin/perluse warnings;use strict;use MySQL::Backup;use Mail::Sender;open my $tmp_sql, '>', "backup.sql";my $mb = new MySQL::Backup('dbname', 'localhost', 'dbuser', 'dbpasswd', {'U

javascript下用for( in )语句 获得所有style 内容的脚本代码_javascript技巧

events=[];for(o in O=obj.currentStyle)events.push(o+'='+O[o])  这里输入代码内容 0 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

简单的ASP中经常用到的代码[推荐]第1/4页_应用技巧

用数据库语句 1.select 语句:命令数据库引擎从数据库里返回信息,作为一组记录. 2.insert into 语句:添加一个或多个记录至一个表. 3.update 语句:创建更新查询来改变基于特定准则的指定表中的字段值. 4.delete 语句:创建一个删除查询把记录从 from 子句列出并符合 where 子句的一个或更多的表中清除. 5.execute 语句:用于激活 procedure(过程) 用 asp 来做一个自己的通讯录练练手吧-- 一.建立数据库: 用 microsoft a

IIS 301重定向与程序代码实现301重定向的差别_相关技巧

先说一下IIS 301重定向的做法: IIS中301重定向 打开"Internet信息服务",右击你要跳转的文件夹或者文件,在弹出的右键菜单中选择"属性"弹出的对话框中,"目录"选项下找到"连接到资源是的内容来源",选择"重定向到URL",在下面的文本框中输入要跳转到的页面同时,将"客户端将定向到" 下面的复选框 "资源的永久重定向"选上 点击"应用&quo

JavaScript/VBScript脚本程序调试(Wscript篇)_相关技巧

在实际工作中,我发现程序员对脚本抱怨最多的就是脚本程序很难调试这个缺点,特别是调试.vbs等WSH程序的时候,总是: 1. 在资源管理器里面双击一个.vbs文件. 2. 程序里面发生了一个错误,例如异常,或者编程逻辑错误. 3. 一行行阅读源文件,然后在估计发生错误的地方,添加很多的Msgbox.Show,打印一些变量的值. 4. 重新执行.vbs文件 5. "当当当",一系列的 "确定"点完了以后,人也晕了,重新回到第三步继续-- 其实我们也是可以用Visual