탭으로 구분된 파일 구성

탭으로 구분된 파일 구성

탭으로 구분된 파일 형식으로 상호 링크 정보를 검색하기 위해 지도 파일의 정보를 비교하고 싶습니다.

예를 들어, 파일에 다음이 포함되어 있습니다.

COG0001 882.DVU3168
COG0002 883.DvMF_2502
COG0001 1140.Synpcc7942_0645
COG0001 1148.SYNGTS_2220

다른 파일

COG0001 H
COG0002 E

최종 파일에는 다음 정보가 포함되어야 합니다.

COG0001 882.DVU3168 H
COG0002 883.DvMF_2502   E
COG0001 1140.Synpcc7942_0645    H
COG0001 1148.SYNGTS_2220    H

편집하다

내 질문으로 돌아가서, 파일 2의 정보를 파일 3으로 인쇄하고 싶습니다.

내 명령은 다음과 같습니다

awk -F $'\t' 'FNR==NR{a[$2]++;next}a[$1]''{print $0, ..... }' file2 file1 > file3

그러면 file1부터 열 2(파일 2), 열 1(파일 1)의 일치하는 콘텐츠까지 모든 것이 제공됩니다.

파일 2의 정보를 인쇄하도록 설정하는 방법은 무엇입니까?

답변1

awk를 사용하면 다음과 같이 할 수 있습니다.

$ awk 'NR==FNR{a[$1]=$2;next}{print $0, a[$1]}' file2 file1
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H

NR==FNR{a[$1]=$2;next}블록은 file2에 대해 실행되며 첫 번째 필드를 키로 사용하여 맵에 두 번째 필드를 저장합니다.

{print $0, a[$1]}블록은 file1에 대해 실행되며 현재 줄과 맵에서 검색된 값을 인쇄합니다.

데이터를 탭으로 구분하려면(필드를 구분하지 않는 다른 공백) 을 실행하고 awk -F'\t' ..., 출력도 탭으로 구분하려면 를 사용하세요 awk -F'\t' -v OFS='\t' ....

답변2

출력 순서가 마음에 들지 않으면 다음을 수행하십시오.

$ join <(sort file1) <(sort file2)
COG0001 1140.Synpcc7942_0645 H
COG0001 1148.SYNGTS_2220 H
COG0001 882.DVU3168 H
COG0002 883.DvMF_2502 E

관련 정보