File1
유전자 목록(문자로 표시)을 포함합니다. 각 유전자는 그것이 표현하는 단백질(문자로 표시)로 설명됩니다.
a-1
b-2
c-3
File2
또한 유전자 목록이 포함되어 있지만 각 유전자는 여러 번 반복됩니다. 이들 유전자 중 일부는 다음과 유사합니다 File1
.
a
a
a
b
b
c
c
c
File1
에서 공통적인 유전자를 모두 찾아야 합니다 File2
. 일반적인 파일은 세 번째 파일로 인쇄해야 합니다(여러 복사본도 마찬가지). 이와 함께 유전자가 발현하는 단백질의 유형도 함께 작성해야 합니다( 에서와 마찬가지로 File1
).
다음은 어떻게 얻을 수 있나요 File3
?
a-1
a-1
a-1
b-2
b-2
c-3
c-3
c-3
답변1
여기에 처리 중인 현재 파일의 ARGIND
인덱스 인 내장 변수가 있는 gawk를 사용하여 이를 수행하는 간단한 방법이 있습니다 .ARGV
첫 번째 파일의 각 입력 줄을 분할 하고 첫 번째 필드를 사용하여 전체 줄을 저장하는 -
배열의 색인을 생성합니다 . table
두 번째 파일(및 후속 파일)의 경우 전체 줄을 인덱스로 사용하여 table
원하는 줄을 검색합니다.
BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}
또는 한 줄로:
awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2
다음은 전통적인 awk에서 작동하는 또 다른 버전입니다. FNR
현재 입력 파일의 입력 레코드 번호인 와 NR
지금까지 본 총 입력 레코드 수를 비교하여 현재 파일이 첫 번째 파일인지 여부를 판단합니다 .
awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2