아미노산 및 잔기 데이터를 제공하는 여러 줄의 .txt 파일이 있습니다. 데이터는 다음과 같습니다.
ARG262-Side ASP368-Side 140,83%
ARG95-Side GLU107-Side 103,73%
ARG474-Side VAL468-Main 94,93%
PHE169-Main ALA190-Main 94,63%
THR205-Side ASP203-Side 94,07%
ILE299-Main LYS249-Main 94%
LEU354-Main LYS365-Main 93,6%
ARG346-Side GLU263-Side 93,57%
LEU301-Main ALA247-Main 93,43%
ALA190-Main PHE169-Main 93,37%
SER252-Side ASP296-Side 93,1%
TYR424-Side ASN446-Main 93%
숫자는 잔기를 나타내고 문자는 아미노산을 나타냅니다. 따라서 각 줄의 첫 번째 및 두 번째 필드에서 앞의 부분 -
은 아미노산 식별자와 잔기 값으로 구성됩니다. 아미노산과 관계없이 첫 번째 또는 두 번째 필드가 기준과 일치하는지 여부에 관계없이 잔류 물 값이 특정 범위에있는 줄만 인쇄하고 싶습니다.
예를 들어 위의 입력 파일에서 300-425 사이의 잔류 물 만 포함하는 데이터를 추출하고 싶습니다 . 이 경우 내 출력은 다음과 같아야합니다.
ARG262-Side ASP368-Side 140,83%
LEU354-Main LYS365-Main 93,6%
ARG346-Side GLU263-Side 93,57%
LEU301-Main ALA247-Main 93,43%
TYR424-Side ASN446-Main 93%
grep
이 명령을 사용하려고 시도했지만 성공하지 못했습니다. 다른 명령을 사용할 수 grep
있습니까?
주로 정규식을 다루는 도구는 숫자를 다루는 데 악명이 높습니다. 이 경우 awk
대신 다음과 같은 것을 사용하는 것이 좋습니다 grep
.
$ awk '{ r1 = substr($1,4,3); r2 = substr($2,4,3) } (r1 >= 300 && r1 <= 425) || (r2 >= 300 && r2 <= 425)' file
ARG262-Side ASP368-Side 140,83%
LEU354-Main LYS365-Main 93,6%
ARG346-Side GLU263-Side 93,57%
LEU301-Main ALA247-Main 93,43%
TYR424-Side ASN446-Main 93%
이 awk
코드는 각 줄의 처음 두 개의 공백으로 구분 된 필드에서 오프셋 4에서 시작하는 트리 문자를 추출하고이를 r1
및 r2
. substr()
필드의 데이터에서 고정 된 위치에있는 숫자를 추출하는 데 사용 하고 있지만, 관심있는 숫자가 유일한 숫자라고 확신하는 경우 숫자가 아닌 모든 숫자를 삭제할 수도 있습니다. 그걸로
r1 = $1; gsub("[^[:digit:]]", "", r1)
유사에 대한 r2
사용 $2
.
끝의 조건이 참이면 현재 줄이 인쇄됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다