다른 파일의 열을 기반으로 고유한 행을 선택하는 방법은 무엇입니까?

다른 파일의 열을 기반으로 고유한 행을 선택하는 방법은 무엇입니까?

2개의 유전자 데이터 세트가 있습니다. 파일 1은 txt 파일이고 해당 염색체 ID는 모두 파일 2에도 나타납니다. 파일 2는 파일 1보다 크고 고유한 염색체 ID가 더 많은 csv 파일입니다. 파일 1과 비교하여 고유한 염색체 ID를 가진 파일 2의 행만 추출하려면 어떻게 해야 합니까?

예를 들어 내 데이터는 다음과 같습니다.

파일 1(염색체 위치는 실제로 내 125번째 열입니다....):

Gene  pval    ... Chromosome position ID
ACE   0.002   ... 01:3290834_CT_C_1
NOS   0.01    ... 03:3304593_GA_G_1
BRCA  0.004 . ... 06:6265733_GA_G_1
CYP3  0.34    ... 09:9433933_GA_G_1

파일 2(염색체 위치가 첫 번째 열임):

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002
03:3304593_GA_G_1       NOS   0.01
06:6265733_GA_G_1       BRCA  0.004
09:9433933_GA_G_1       CYP3  0.34

염색체 위치 ID만을 기준으로 파일 2에만 나타나는 출력의 유일한 줄은 다음과 같습니다.

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002

uniq이 출력을 사용하여 얻으려고 시도했지만 sort지금까지는 여러 텍스트 파일을 사용하는 온라인 예제만 찾았지만 대신 고유한 ID 행이 아닌 일치하는 ID 행을 사용하고 싶습니다. 이 방법도 시도했지만 grep파일 크기가 커서 명령이 종료되었습니다.

답변1

다른 스레드의 솔루션 수정(셸 확장 파일 [12] 제외):

awk ' FNR==NR {P[$125]; next} FNR==1 || !($1 in P)' file1 file2
Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002

관련 정보