- 论坛徽章:
- 0
|
本帖最后由 ygh1989 于 2013-03-15 12:38 编辑
小弟是perl菜鸟,写了个程序发现错了,但是找不到问题,请论坛前辈指教。
有两个表,一个大表 BIG,一个表POS。要从BIG表中删除POS中的每一行。(BIG中包含了POS,要从BIG中删除POS的行)
但是运行后,产生的文件还是原来的BIG表,并没有删掉POS的行
另外,这个程序运行很慢,有没有更好的算法呢?
求指教 万分谢谢!- #/usr/bin/perl
- use strict;
- use warnings;
- die "Usage: perl $0 POSTIVE BIG OUT\n" unless (@ARGV == 3);
- open (POS, $ARGV[0]) or die "Can not open file $ARGV[0]\n";
- open (BIG, $ARGV[1]) or die "Can not open file $ARGV[1]\n";
- open (OUT, ">$ARGV[2]") or die "Can not open file $ARGV[2]\n";
- my %postag = ();
- while(<POS>){
- chomp;
- my @line = split/\s+/;
- my $var = $line[0]."\t".$line[1];
- $postag{$var} =1;
- }
- while(<BIG>){
- chomp;
- my $flg = 0;
- my @line = split/\s+/;
- foreach my $tag(keys %postag){
- my @var = split(/\t/,$tag);
- if((($line[0] eq $var[0])&&($line[1] eq $var[1]))||(($line[0] eq $var[1])&&($line[1] eq $var[0]))){
- $flg=1;
- last;
- }
- }
- if(!$flg){
- print OUT join("\t",@line),"\n";
- }
-
- }
复制代码 |
|