나는 최근에 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
라는 파일 핸들이 있는 변수에 저장됩니다 . 이것$fh
open
부사인수는 :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의 줄 바꿈 처리"더 많은 정보를 알고 싶습니다.