다른 파일의 단어 목록이 포함된 한 파일의 줄을 추출하는 방법은 무엇입니까? [복사]

다른 파일의 단어 목록이 포함된 한 파일의 줄을 추출하는 방법은 무엇입니까? [복사]

이 사이트의 제안 사항을 모두 시도했지만 결과가 불완전합니다.

파일 1은 파일 2에서 검색하고 필요한 정보가 포함된 전체 행 세트를 추출하려는 단백질 목록을 보여줍니다.

Q14157
Q14444
P23246
Q96EP5
Q9UN86
Q14011
Q7Z739
Q9Y383
Q96I24
Q9NP61
P29558
P51116
P00441
Q2TBT7
Q9NZI8

파일 2에는 파일 1의 목록에서 추출할 정보가 포함되어 있습니다(이 섹션은 여기에 불완전하게 붙여넣어져 있음).

P21796  260 Phosphoserine   S   1
P21796  266 N6-acetyllysine K   4
P21796  266 Ubiquitination  K   3
P21796  274 N6-acetyllysine K   1
P21796  274 Ubiquitination  K   3
P18848  45  Sumoylation K   1
P18848  45  Ubiquitination  K   2
P18848  53  Sumoylation K   1
P18848  55  Ubiquitination  K   2
P18848  69  Phosphoserine   S   4
P18848  75  Ubiquitination  K   2
P18848  88  Ubiquitination  K   2
P18848  107 Phosphothreonine    T   1
P18848  114 Phosphothreonine    T   1
P18848  115 Phosphothreonine    T   1
P18848  119 Phosphothreonine    T   1
P18848  213 Phosphothreonine    T   1
P18848  215 Phosphoserine   S   1
P18848  219 Phosphoserine   S   4
P18848  224 Phosphoserine   S   3
P18848  231 Phosphoserine   S   1
P18848  235 Phosphoserine   S   1
P18848  245 Phosphoserine   S   3
P18848  248 Phosphoserine   S   3
P18848  267 Sumoylation K   1
P18848  277 Ubiquitination  K   1
P18848  293 Phosphothreonine    T   1
P18848  295 Phosphotyrosine Y   1
P18848  335 Ubiquitination  K   2
P18848  343 N6-acetyllysine K   1
P18848  348 N6-acetyllysine K   1
P23246  7   Dimethylation   R   1
P23246  7   Omega-N-methylarginine  R   2
P23246  8   Phosphoserine   S   3
P23246  9   Asymmetric dimethylarginine R   1
P23246  9   Dimethylation   R   1
P23246  9   Methylation R   1
P23246  9   Omega-N-methylarginine  R   3
P23246  19  Dimethylation   R   1
P23246  19  Methylation R   1
P23246  19  Omega-N-methylarginine  R   2
P23246  25  Dimethylation   R   1
P23246  25  Methylation R   1
P23246  25  Omega-N-methylarginine  R   2
P23246  32  Dimethylation   R   1
P23246  32  Methylation R   1
P23246  33  Phosphoserine   S   8
Q14011  17  Phosphothreonine    T   1
Q14011  21  Phosphoserine   S   1
Q14011  33  Phosphoserine   S   1
Q14011  47  Methylation R   1
Q14011  71  Phosphoserine   S   3
Q14011  84  Ubiquitination  K   2
Q14011  94  Dimethylation   R   1

답변1

grep -f file1 file2file2모든 패턴을 검색 file1하고 일치하는 라인을 인쇄해야 합니다. (그러나 모든 곳에서 일치하는 경우 첫 번째 열 뒤에 단백질 이름이 나타나면 거짓 긍정이 발생할 수 있습니다.) 고정 문자열을 일치시키려면 -F.

답변2

이 문제를 해결하는 한 가지 방법은 file1의 모든 정규식 문자를 이스케이프하고 다음 단계에서 양쪽 끝에서 문자열을 제한하는 것입니다. 단계의 순서가 중요하다는 점에 유의하세요.

hybrid regex이는 일치할 실제 문자열이 모든 정규식 BRE 문자를 이스케이프하여 리터럴 문자열이 되고, 주변에 정규식 문자를 배치하여 일치를 첫 번째 필드로 제한하는 방법 이라고 할 수 있습니다 .

$ < file1 \
    sed -e '
      s:[[\.*^$]:\\&:g
      s/.*/^&[[:blank:]]/
'  | grep -f - file2

*1단계 => BRE 표현식을 사용하여 file1의 문자열을 grep에 해당하는 일반 문자열로 렌더링합니다.

*2단계 => 위 이스케이프 문자열의 왼쪽을 줄의 시작 부분으로 제한하고 오른쪽을 공백 문자로 제한합니다.

  • 참고 어린이: BRE 정규식 문자를 이스케이프 처리하고 있습니다. 그러니 grep로 전화하지 마세요 -E.

답변3

다음 awk 명령을 사용할 수 있습니다

awk 'NR==FNR{a[$1];next}($1 in a){print $0}' file1 file2

관련 정보