37,719
社区成员
发帖
与我相关
我的任务
分享
#/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";
}
}
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";
}
貌似可以改为:
my $key = join("\t", @line);
if not exist $postarg{$key) {
print OUT $key, "\n";
}