탭으로 구분된 파일 형식으로 상호 링크 정보를 검색하기 위해 지도 파일의 정보를 비교하고 싶습니다.
예를 들어, 파일에 다음이 포함되어 있습니다.
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