두 파일을 비교하고 해당 결과를 검색합니다.

두 파일을 비교하고 해당 결과를 검색합니다.

두 개의 파일이 있습니다. 파일1에 다음이 포함됨

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

일치는 조인(file1의 필드 4와 file2의 필드 1을 인쇄하고 일치시키는 데 사용됨) 및 정렬(각각 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]){

틀렸다.

관련 정보