다른 열에 일치하는 항목이 포함된 경우 파일의 열을 연결합니다.

다른 열에 일치하는 항목이 포함된 경우 파일의 열을 연결합니다.

두 개의 파일이 있습니다.

파일 1.txt

30    40    A    T    match1    string1
45    65    G    R    match2    string2
50    78    C    Y    match3    string3

파일 2.txt

match1    60    add1    50    add2
match2    15    add1    60    add2
match3    20    add1    45    add2

아래와 같은 출력을 얻고 싶습니다.

30    40    A    T    match1    string1    60    add1
45    65    G    R    match2    string2    15    add1
50    78    C    Y    match3    string3    20    add1

file1.txt의 열 5에 일치하는 항목이 있으면 file2.txt의 열 2와 3을 file1.txt 끝에 추가하고 싶습니다.

이 조인 명령을 사용해 보았습니다.

join -1 5 -2 1 -a 1 -o 1.1 -o 1.2 -o 1.3 -o 1.4 -o 1.5 -o 1.6 -o 2.2 -o 2.3 file1.txt fil2.txt

그러나 이것은 첫 번째 파일의 열만 인쇄하는 것 같습니다. 이 문제를 해결하기 위해 Join 외에 다른 솔루션이 있습니까?

답변1

넌 할 수있어:

join -1 5 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 file1.txt file2.txt

예:

% cat f1.txt 
30    40    A    T    match1    string1
45    65    G    R    match2    string2
50    78    C    Y    match3    string3

% cat f2.txt 
match1    60    add1    50    add2
match2    15    add1    60    add2
match3    20    add1    45    add2

% join -1 5 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 f1.txt f2.txt
30 40 A T match1 string1 60 add1
45 65 G R match2 string2 15 add1
50 78 C Y match3 string3 20 add1

답변2

해결책을 찾았습니다.

awk -F "\t" 'FNR==NR {a[$1] = $2 "\t" $3;next} $5 in a{print $0 "\t" a[$5]}' file2.txt file1.txt > outing.txt

관련 정보