2017-10-09 2 views
1

누군가가이 라인의 각각에 대해 다음과 같은 형식덧붙이 텍스트 (Bash를 이용한?)

sp|Q9NYW0|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

의 항목이 내 FASTA 파일을 편집 할 전략을 마련하는 데 도움이 수 , 나는 "_REVERSED"라는 텍스트를 || | 사이의 액세 스 번호에 추가해야합니다. 예를 들어, 위의 항목이 될 것입니다 :

sp|Q9NYW0_REVERSED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_REVERSED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

나는이 쉽게 질문을 알고, 그것은 샘플 bash는 스크립트를 사용하여 수행 할 수 있다고 생각하지만, 나는이 새로운 오전 정말 어떤 도움을 주셔서 감사합니다.

답변

1

awk으로 확실히 할 수 있지만 sed으로 쉽게 할 수 있습니다. 본질적으로 3 다시 참조 정상 대체 구문의 정합 부분 (\(...\) 사이에 포획 자 예컨대 해당 그룹), 예를 사용

$ sed 's/\(^[^|]*|\)\([^|]*\)\(.*$\)/\1\2_RESERVED\3/' yourfile 
sp|Q9NYW0_RESERVED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_RESERVED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

귀하의 경우에는

sed 's/match/replace/' 

이 경기는 우리가 캡처하고자하는 첫 번째 역 참조로 구성되어 있습니다 :

\1 (첫 번째 역 참조)와 replace에 다시 넣어 대체됩니다
\(^[^|]*|\) # match from beginning '^' everything not '|', with the '|' 

. "accession number + _RESERVED" 당신이 필요로하는 삽입 \2_RESERVED

\([^|]*\)  # which just captures everything up to the next '|' 
그것은 replace에 삽입됩니다

: 다음, 우리는 유사과 가입 번호를 수집합니다. \1\2_RESERVED\3으로 함께 전체 replace 퍼팅

\(.*$\)  # which just says grab everything that remains '.*$' 

: 마지막으로, 우리는 단지와 함께 라인에 다른 모든 것들을 모았습니다.

배쉬 솔루션

당신이 bash는이 작업을 수행해야하는 경우, 그것은 동등하게 쉽게 필드를 분할 '|'로 설정 IFS (내부 필드를 구분) 간단한 read 루프를 사용하여 수행 할 수 있습니다 . 예 :

$ while IFS=$'|' read a b c; do echo "${a}|${b}_RESERVED|${c}"; done <yourfile 
sp|Q9NYW0_RESERVED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_RESERVED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens 

질문이 있으면 알려주세요.

1

정규식 솔루션은 효율적일 수 있지만 이해하기 어렵습니다. awk의 한 가지 좋은 점은 자연스럽게 입력을 필드로 나눠서 출력하기 전에 you can manipulate 필드를 입력하는 것입니다. 정규식 접근 방식보다 쉽게 ​​입력/기억할 수 있습니다.

$ awk 'BEGIN {FS="|";OFS="|"} {$2=$2 "_REVERSED"}{print}' < t 
sp|Q9NYW0_REVERSED|T2R10_HUMAN Taste receptor type 2 member 10 OS=Homo sapiens 
sp|Q9NYV9_REVERSED|T2R13_HUMAN Taste receptor type 2 member 13 OS=Homo sapiens