두 파일 사이의 패턴 찾기

두 파일 사이의 패턴 찾기

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

관련 정보