특정 단백질의 여러 서열(아미노산 서열)이 포함된 fasta 파일이 있습니다. 시퀀스의 마지막 문자는 "*"로 표시되며 이는 실제로 정지 코돈을 나타냅니다. MUSCLE을 사용하여 다중 서열 정렬을 수행하려고 하는데 도구가 끝에 "*"가 있는 모든 서열을 거부합니다.
"*"를 제거하는 방법?
예를 들어 내 입력 파일은 다음과 같습니다.
>seq1
MSDGFHS*
>Seq2
MSDRFH*
나에게 필요한 것은:
>seq1
MSDGFHS
>Seq2
MSDRFH
답변1
그리고 sed
. 예를 들어:
$ printf ">seq1\nMSDGFHS*\n>Seq2\nMSDRFH*\n" | sed -e 's/\*$//'
>seq1
MSDGFHS
>Seq2
MSDRFH
*
이렇게 하면 줄 끝에 있는 모든 별표 문자( )가 제거됩니다.
sed의 -i
옵션을 사용하여 원본 파일을 편집할 수 있습니다. 아니면 sed
MUSCLE의 출력을 새로운 fasta 파일로 리디렉션하고 이를 MUSCLE의 입력으로 사용하는 것이 더 나은 옵션이 될 것입니다(일반적으로 다른 프로그램에서도 원본 파일을 사용해야 하는 경우 가장 좋습니다).아니요정보 영구 삭제 - 데이터가 삭제되면 복구할 수 있다는 보장이 없습니다. 특정 목적을 위해 파일의 임시 수정 버전을 사용하는 것처럼 항상 백업을 해 두는 것이 좋습니다.
답변2
데이터에 *
지속하려는 다른 위치가 포함되어 있지 않은 경우 다음과 같이 약간의 tr
작업을 수행해야 합니다.
$ tr -d '*' < file
>seq1
MSDGFHS
>Seq2
MSDRFH
답변3
vi
일하다:
vi file.txt
:1,$s/\*$//
ZZ
이는 vi
파일( )의 모든 줄을 지정하도록 지시하며, 1,$
줄 끝( )에서 리터럴(정규식 메타 문자이므로 이스케이프됨)이 발견될 때마다 아무것도 없는 것으로 대체됩니다(예: 삭제).*
$
현재 삭제된 주석에서 지적 했듯이 @roaima
검색 및 바꾸기 명령은 다음과 같이 더 편리하게 작성할 수 있습니다.
:%s/\*//
답변4
사용행복하다(이전 Perl_6)
raku -pe 's/ \* $ //;'
입력 예:
>seq1
MSDGFHS*
>Seq2
MSDRFH*
예제 출력:
>seq1
MSDGFHS
>Seq2
MSDRFH
이제 당신은 그것에 익숙해 져야합니다 s///
.”삼중 고상선" 관용구. 위의 관용구는 Perl 프로그래밍 언어 계열의 구성원인 Raku에서 실행되는 관용구입니다. 이 -e
플래그는 Raku에게 "한 줄" 프로그램(예를 들어 스크립트 파일 이름 대신)을 기대하도록 지시합니다. 이 플래그가 기본적으로 활성화되어 있는 경우 strict
코드-p
를 한 줄씩 실행하여 $_
각 줄 끝에 테마 변수를 자동으로 인쇄합니다.
두 개의 왼쪽 슬래시 문자 사이에서 정규식은 \*
(백슬래시로 이스케이프 처리된) 리터럴 별표를 검색한 다음 $
문자열 끝 너비가 0인 어설션을 검색합니다. 두 개의 오른쪽 슬래시 문자 사이에는 아무 것도 없으므로 줄 끝 별표는 아무 것도 없는 것으로 대체됩니다(즉, 삭제됨).
흥미로운 점은 Raku의 -ne
비자동 인쇄 한 줄씩 플래그로 전환할 수 있으며 해당 s///
관용구는 수정/삭제하기로 선택한 내용을 한 줄씩 반환한다는 것입니다(이와 같은 인쇄 문을 추가했다고 가정 say
). :
raku -ne 's/ \* $ //.say;' test.fasta
Nil
「*」
Nil
「*」