![다른 열에 일치하는 항목이 포함된 경우 파일의 열을 연결합니다.](https://linux55.com/image/85081/%EB%8B%A4%EB%A5%B8%20%EC%97%B4%EC%97%90%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%ED%95%AD%EB%AA%A9%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EA%B2%BD%EC%9A%B0%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%97%B4%EC%9D%84%20%EC%97%B0%EA%B2%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
두 개의 파일이 있습니다.
파일 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