괄호가 아닌 두 번째 열의 모든 항목을 삭제합니다.

괄호가 아닌 두 번째 열의 모든 항목을 삭제합니다.

다음과 같은 파일이 있습니다.

gene ID              protein
Solyc06g062540    (Z) PYROPHOSPHATASE 3 (PTHR20889:SF0)
Solyc10g075050    ALBUMIN SUPERFAMILY (PTHR33076:SF11)
Solyc07g061760    SUBFAMILY (PTHR24177:SF35)

파일은 탭으로 구분됩니다. 첫 번째 열(유전자 ID)과 두 번째 열(단백질 이름) 사이에 탭이 있습니다. (단백질 이름에는 공백이 포함될 수 있지만 탭은 포함될 수 없습니다.) 단백질 이름에는 괄호 안에 문자열이 포함됩니다(예: (PTHR33076:SF11); 이것이 바로 단백질이다ID. 첫 번째 열을 유지하고 두 번째 열에서 단백질 ID(및 해당 괄호)를 제외한 모든 항목을 삭제하고 싶습니다. 따라서 출력은 다음과 같습니다.

Solyc06g062540    (PTHR20889:SF0)
Solyc10g075050    (PTHR33076:SF11)
Solyc07g061760    (PTHR24177:SF35)

어떻게 해야 하나요? "표시" 기능을 사용하여 괄호 안의 ID를 모두 강조표시하도록 입력했는데 (\w+\d+:\w+\d+)괄호 안의 ID를 모두 표시했지만 조작할 수 없습니다. 참고로 일부 단백질 이름에는 괄호 안에 다른 문자열이 있습니다(예: 단백질 이름에 (Z)내가 원하는 ID 값과 함께 포함된 첫 번째 행 참조). 나는 그것들을 보관하고 싶지 않습니다.

답변1

정규식 검색 및 바꾸기를 사용하여 이를 수행할 수 있습니다. Ctrl+를 눌러 H바꾸기 대화 상자를 엽니다. 검색 모드가 인지 확인하세요 Regular Expression.

무엇을 찾다:

(^[^\t\r\n]+\t)[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*

다음으로 교체:

\1\2

패턴 설명:

[^\t\r\n]+탭, 개행 또는 캐리지 리턴을 포함하지 않는 문자열입니다. 이는 파일의 한 열에 있는 텍스트와만 일치해야 합니다.

^[^\t\r\n]+^선행은 일치 항목을 줄의 시작으로 제한 하기 때문에 첫 번째 열의 내용과 일치합니다 .

첫 번째 캡처링 그룹은 (^[^\t\r\n]+\t)첫 번째 필드 및 다음 탭의 내용과 일치합니다.

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*두 번째 필드의 내용과 일치하며 괄호 식이 있는 경우에만 일치합니다.

두 번째 캡처링 그룹은 (\(\w+\d+:\w+\d+\))괄호 안의 표현식과 일치합니다.

교체 패턴은 \1\2첫 번째 및 두 번째 캡처링 그룹을 반환합니다. 일치하는 부분이 캡처 그룹에 포함되지 않기 때문에 두 번째 필드의 주변 텍스트가 효과적으로 삭제됩니다.

답변2

\t.*( (괄호 안에 있는) 단백질 ID가 항상 줄의 마지막 항목인 경우(표시한 대로), 검색하여 (또는 가능하면 \t[^\r\n]*() 로 바꾸면 충분합니다 \t(.

관련 정보