두 파일을 결합하는 방법

두 파일을 결합하는 방법

두 파일을 결합하고 싶고 Join 명령을 사용해야 합니다. 이것은 첫 번째 파일 file1.txt입니다.

SUBJID  SEX DTHHRDY
GTEX-1117F  2   4
GTEX-111CU  1   0
GTEX-111FC  1   1
GTEX-1122O  2   4

두 번째 파일 file2.txt입니다.

GTEX-1117F-003-a
GTEX-1117F-003-b
GTEX-111CU-0011-a
GTEX-111FC-0011
GTEX-1122O-0045-a
GTEX-1122O-0045-b

보시다시피 File 1은 열 1의 File 2와 일치합니다. 또한 파일 1의 열 2와 열 3을 필터링하려면 이 두 필드를 연결해야 합니다. 2열의 경우 모든 값 2를 가져와야 하고, 3열의 경우 모든 값 4를 가져와야 합니다.

출력이 필요함

Sample  SEX DTHHRDY
GTEX-1117F-003-a    2   4
GTEX-1117F-003-b    2   4
GTEX-1122O-0045-a   2   4
GTEX-1122O-0045-b   2   4

GTEX-1117F는 처음 두 줄이 동일하고 차이점이 -003-a이므로 GTEX-1117F-003-a와 관련이 있지만 잘라서 보면 서로 관련되어 있음을 알 수 있습니다. 시도했지만 join -1 1 -1 1 file1.txt file2.txt"연결: 호환되지 않는 연결 필드 1, 2"라는 메시지가 표시되었습니다. 그리고 이것을 이용해서 2개의 새로운 파일을 생성해서 awk '{if ($2 == "2") print $1,2,3}'12개의 데이터가 생겼는데, 지금은 file2.txt로 어떻게 합치는지 모르겠습니다. 또한 join명령을 사용해야합니다

답변1

head -n 1 file1.txt
join <(paste -d" " <(cut -d- -f1-2 file2.txt) file2.txt | sort) \
     <(tail -n +2 file1.txt | sort) \
| cut -d" " -f2- \
| awk '$2 == 2 && $3 == 4' \
| column -t
SUBJID  SEX DTHHRDY
GTEX-1117F-003-a   2  4
GTEX-1117F-003-b   2  4
GTEX-1122O-0045-a  2  4
GTEX-1122O-0045-b  2  4

답변2

문제는 join조인 필드가 동일해야 한다는 것입니다. 따라서 file1.txt와 정확히 일치하는 필드를 얻으려면 file2.txt를 수정해야 합니다.

또한 데이터를 정렬해야 합니다.

프로세스 교체s는 를 사용할 때 매우 유용합니다 join.

관련 정보