fasta 파일에서 특수 문자 제거

fasta 파일에서 특수 문자 제거

나는 최근에 awk를 사용하여 fasta 파일을 선형화했습니다. 출력이 완벽합니다. 그러나 내 시퀀스에는 캐럿(^)이 있습니다. 이 캐럿을 제거하고 싶습니다. 아래는 나의 시도입니다. 도움을 주시면 대단히 감사하겠습니다.

>P1
MPPRRSIVEVKVLDVQKRRVPNKHYVYIIRVTWSSGATEAIYRRYSKFFDLQMQMLDKFP^MMEGGQKDPKQRIIPFLPGKILFRRSHIRDVAVKRLIPIDEYCKALIQLPPYISQCDEVLQ^MFFETRPEDLNPPKEEHIGKKKSGNDPTSVDPM
>P2
MAEVRKFTKRLSKPGTAAELRQSVSEAVRGSVVLEKAKLVEPLDYENVITQRKTQIYSDP^MLRDLLMFPMEDISISVIGRQRRTVQSTVPEDAEKRAQSLFVKECIKTYSTDWHVVNYKYE^MDFSGDFRMLPCKSLRPEKIPNHVFEIDEDCEK
>P3
GDDSEWLKLPVDQKCEHKLWKARLSGYEEALKIFQKIKDEKSPEWSKYLGLIKKFVTDS^MNAVVQLKGLEAALVYVENAHVAGKTTGEVVSGVVSKAKELGIEICLMYVEIE^MKGESVQEELLKGLDNKNPKIIVACIETLRKALS

나는 다음을 사용하려고합니다 :

$ sed '/s: ^// seq2.fa>seq3.fa

sed:e expression #1,char7: unkown command: '/' 위의 코드는 도움을 주셔서 감사하다는 오류를 표시합니다 .

답변1

sed 's/\^//' seq2.fa>seq3.fa(각 줄의 첫 번째 캐럿 제거) 또는 sed 's/\^//g' seq2.fa>seq3.fa(각 줄의 모든 캐럿 제거)가 원하는 것입니다.

답변2

^파일의 모든 문자를 제거하려면 tr다음과 같이 사용할 수 있습니다.

tr -d '^' <seq2.fa >seq3.fa

tr유틸리티는 단일 문자를 조작하는 데 가장 효율적인 도구입니다. 문자를 제거, 교체 또는 "압착"(여러 연속 문자를 단일 문자로 대체)할 수 있습니다. 그러나 어떤 논리도 사용할 수 없습니다.

시퀀스 라인에서 문자를 제거하고 fasta 헤더 라인을 건드리지 않으려면 다음을 수행하십시오.

sed '/^>/! s/\^//g' <seq2.fa >seq3.fa

이렇게 하면 문자로 시작하지 않는 모든 줄에서 대체 명령이 실행됩니다 s/\^//g(사용하려고 했지만 슬래시 순서가 잘못된 것으로 생각됩니다) >. 바꾸기는 ^해당 문자가 더 이상 남지 않을 때까지 반복적으로 다른 문자로 대체하여 줄의 모든 문자를 제거합니다.

이스케이프 해야 합니다 ^. 그렇지 않으면 앵커 역할을 하여 정규 표현식을 줄의 시작 부분에 고정합니다.

답변3

캐럿( )이 아닙니다 ^. Windows 시스템에서는 \r\n행의 끝을 나타내기 위해 캐리지 리턴(캐리지 리턴과 개행 문자)을 사용합니다. 이는 \n일반적 \r으로 .를 사용하는 것과는 다릅니다 ^M. 예를 참조하세요:

$ printf 'a\r\n' | cat -v
a^M

사실, 나는 당신의 시퀀스 중 하나에 대해 해킹을 실행했고(제거한 후 ^에 그대로 두었습니다 M) nr거의 완벽한 히트를 찾았지만 추가 M은 공백이었습니다.

폭발은 여자가 틀렸다는 것을 보여줍니다

나는 당신이 Windows 시스템에서 이 파일에 어떤 작업을 했을 것이라고 생각하며, 그 \r내용에 또는 . ^M각 예제가 실제로 어떻게 보이는지 확인하세요 ^. 위의 폭발에서 확인된 것처럼, 그것들 도 ^M제거하려는 실제 메티오닌이 아닙니다 . 따라서 다음과 같이 시도해 보십시오.M^

tr -d '\r' < seq2.fa > seq3.fa

또는 파일에 수행한 작업으로 인해 ^및 텍스트가 입력된 경우 M다음을 모두 삭제합니다.

sed 's/\^M//g' seq2.fa > seq3.fa

그냥 삭제하면 ^여분의 메티오닌으로 인해 잘못된 시퀀스가 ​​생성됩니다.

답변4

사용행복하다(이전 Perl_6)

~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("\n\r")); $fh.put: $data;' | od -bc
0000000   061 012 015
           1  \n  \r
0000003
~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("\n")); $fh.put: $data;' | od -bc
0000000   061 012
           1  \n
0000002

OP가 직면한 문제는 줄 끝의 부적절한 처리로 인해 발생했습니다. 줄 끝 처리를 올바르게 수행하려면 이 매개변수를 제어할 수 있는 언어가 필요합니다. 다행스럽게도 Raku는 그런 언어입니다.

위에서 데이터는 ed $data라는 파일 핸들이 있는 변수에 저장됩니다 . 이것$fhopen부사인수는 :nl-out출력 종결자( \n\r또는)를 설정하는 데 사용되며, 올바른 종결자는 \n데이터를 stdout으로 출력하는 데 사용됩니다.$*OUT

따라서 FASTA 파일이 있는 경우 :nl-out("\n")Unix/Linux 시스템에서 파일을 다시 열 수 있도록 올바른 종결자를 설정할 수 있습니다. 물론, 이것에 압도당할 수도 있습니다. 아래를 참조하십시오. 이것은 모두입니다!

~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("thats-all-folks")); $fh.put: $data;' | od -bc
0000000   061 164 150 141 164 163 055 141 154 154 055 146 157 154 153 163
           1   t   h   a   t   s   -   a   l   l   -   f   o   l   k   s
0000020
~$ raku -e 'my $data = 1; my $fh = open($*OUT, :nl-out("")); $fh-eol.put: $data;' | od -bc
0000000   061
           1
0000001

(유사한 부사 매개 변수는 :nl-in파일을 읽을 때 개행 문자가 해석되는 방식을 제어하는 ​​데 사용됩니다.입력하다행복하다. 하지만 Raku는 기본적으로 자동으로 씹기 때문에 그다지 중요하지 않습니다.)

페이지 참조:"Raku의 줄 바꿈 처리"더 많은 정보를 알고 싶습니다.

https://raku.org

관련 정보