比较两个文件并检索相应的结果

比较两个文件并检索相应的结果

我有两个文件。File1 包含

470.2843    organism AR_0036     123    Intermediate
470.2845    organism AR_0033    456 Susceptible
903909.3    organism Naval-83   789 Resistant

并且 file2 包含

123
456
abc
def
789

我希望我的输出是这样的:如果 file2 中的值与 file1 不匹配,perl 在输出文件中将这些行留空;或者如果匹配,则在输出文件中打印匹配行的相应数据。

#!/usr/bin/perl
my $file1 = '/Users/apple/Desktop/ncbi_ab_data/new_file1';
my $file2 = '/Users/apple/Desktop/ncbi_ab_data/new_file2';
open my $fh1, '<' , $file1;
while (<$fh1>){
    chomp;
    my @file1 = split('\t', $_ );

        #print "$file1[0]\t";
        #print "$file1[1]\t";
        #print "$file1[2]\t";
        #print "$file1[3]\t\n";

    open my $fh2, '<' , $file2;
    while (<$fh2>){
    chomp;
    my @file2 = split('\t', $_ );
    #if ($file2[0] == $file1[2])
    #print "$file2[0]\n";
    if ($file2[0] = $file1[2]){
        print "$file2[0]";
        print "\t$file1[3]\n";

    }
    #print "$file1[0]\n";
    #print "$file2[1]\n";
    #print "$file2[2]\n";
    #print "$file2[3]\n";
    #print "$file2[4]\n";
    }
}

我已经编写了这段代码,但它不能正常工作。

答案1

可以使用 join(用于打印 file1 的字段 4 与 file2 的字段 1 并将其匹配)和 sort(分别用于在 file1 和 file2 的字段 4 和字段 1 上生成有序输入数据)来执行匹配:

 join -o 2.1,1.3 -1 4 -2 1 <(sort -k 4 file1) <(sort -k 1 file2)

使用您的样本数据,它会产生

 123 AR_0036
 456 AR_0033
 789 Naval-83

关于你的脚本,我猜索引 2 在

 if ($file2[0] = $file1[2]){

是错的。

相关内容