请教perl编程问题,只能用perl,其他方法或建议请绕道,O(∩_∩)O谢谢!
我有两个文件A和B,每个文件有对应的四列,现在我想以第一列(名称),将A和B两个文件里每行一一对应,能对应的保留在原文件中,不能对应的删除,用perl编写一个这样的程序,...
我有两个文件A和B,每个文件有对应的四列,现在我想以第一列(名称),将A和B两个文件里每行一一对应,能对应的保留在原文件中,不能对应的删除,用perl编写一个这样的程序,有没有大侠帮忙写个perl程序,谢谢!
展开
展开全部
不知道你文件的具体格式,还有第一列否完全相同才保留,写个,在上面适当修改就是了
一般不在原文件上修改,如果程序有BUG,那原文件数据就没了,所以相同的输出到另外两个文件AA,BB
open A,"<A" || die"cannot open A:$!";
open B,"<B" || die"cannot open B:$!";
open AA,">AA" || die"cannot open AA:$!";
open BB,">BB" || die"cannot open BB:$!";
my %A;
while(<A>"{
my @a=split;#希望你第一列数据里没有空格,有就要另想办法了
$A{$a[0]}=$_;用第一列做键 一行做值生成哈希
}
while(<B>){
my @b=split;同A
if($A{$b[0]}){ #如果名称对应,下面分别输出到AA,BB文件中
print AA $A{$b[0]};
print BB $_;
}
}
思路是这样,希望对你有用,如果第一列不是相同的,不明白怎么用,可以找我
一般不在原文件上修改,如果程序有BUG,那原文件数据就没了,所以相同的输出到另外两个文件AA,BB
open A,"<A" || die"cannot open A:$!";
open B,"<B" || die"cannot open B:$!";
open AA,">AA" || die"cannot open AA:$!";
open BB,">BB" || die"cannot open BB:$!";
my %A;
while(<A>"{
my @a=split;#希望你第一列数据里没有空格,有就要另想办法了
$A{$a[0]}=$_;用第一列做键 一行做值生成哈希
}
while(<B>){
my @b=split;同A
if($A{$b[0]}){ #如果名称对应,下面分别输出到AA,BB文件中
print AA $A{$b[0]};
print BB $_;
}
}
思路是这样,希望对你有用,如果第一列不是相同的,不明白怎么用,可以找我
2012-08-29
展开全部
#!/bin/perl
my %clomn1;my %clomn2;my @file1;my @file2;
open IN,$ARGV[0];
while(<IN>){
$clomn1{ (split)[0]}=1;
push @file1;
}
close IN;
while(<IN>){
$clomn2{ (split)[0]}=1 if exists $clomn1{ (split)[0]}=1;
push @file2;
}
close IN;
open OUT,">$ARGV[0]";
foreach (@file1){
print OUT if exists $clomn2{ (split)[0]};
}
close OUT;
open OUT,">$ARGV[1]";
foreach (@file2){
print OUT if exists $clomn2{ (split)[0]};
}
close OUT;
#随手写的,运行前请备份文件!
my %clomn1;my %clomn2;my @file1;my @file2;
open IN,$ARGV[0];
while(<IN>){
$clomn1{ (split)[0]}=1;
push @file1;
}
close IN;
while(<IN>){
$clomn2{ (split)[0]}=1 if exists $clomn1{ (split)[0]}=1;
push @file2;
}
close IN;
open OUT,">$ARGV[0]";
foreach (@file1){
print OUT if exists $clomn2{ (split)[0]};
}
close OUT;
open OUT,">$ARGV[1]";
foreach (@file2){
print OUT if exists $clomn2{ (split)[0]};
}
close OUT;
#随手写的,运行前请备份文件!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
perl程序:编写一个这样的程序
#!/usr/bin/perl
open my $a, 'a.txt';
open my $b, 'b.txt';
(split)[0] eq (split /\s+/, <$b>)[0] ? print :undef while <$a>;
#!/usr/bin/perl
open my $a, 'a.txt';
open my $b, 'b.txt';
(split)[0] eq (split /\s+/, <$b>)[0] ? print :undef while <$a>;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询