두 파일을 결합하고 싶고 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
.