두 파일 사이의 패턴 찾기

두 파일 사이의 패턴 찾기

File1유전자 목록(문자로 표시)이 포함되어 있습니다. 각 유전자는 그것이 표현하는 단백질에 의해 설명됩니다(문자로 표시됨).

a-1
b-2
c-3

File2유전자 목록도 포함되어 있지만 각 유전자는 여러 번 반복됩니다. 이 유전자 중 일부는 다음과 유사합니다 File1.

a
a
a
b
b
c
c
c

File1중국에 공유된 유전자를 모두 찾아내야 한다 File2. Common은 세 번째 파일로 인쇄해야 합니다(여러 사본의 경우에도 마찬가지). 이 외에도 유전자가 발현하는 단백질 종류도 함께 적어야 합니다( 에서와 마찬가지로 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

관련 정보