파일에서 ">"와 "박테리아"라는 단어 사이의 부분을 어떻게 삭제합니까?

파일에서 ">"와 "박테리아"라는 단어 사이의 부분을 어떻게 삭제합니까?

파일의 모든 항목과 단어 >사이의 부분을 삭제하고 싶습니다.Bacteria

  • 다음은 입력의 예입니다.
    >AADV02000003.105686.107093 Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;
    
  • 결과는 다음과 같아야 합니다.
    >Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;
    

이것은 FASTA 파일(생물정보학의 일반적인 파일 형식)이므로 >항상 줄의 첫 번째 비공백 문자가 있고하나이런 캐릭터가 됩니다.

사용을 고려하고 있지만 sed명령을 설정하는 방법을 잘 모르겠습니다. 당신의 도움을 주셔서 감사합니다.

답변1

헤더가 a로 시작하고 줄의 공백이 아닌 첫 번째 문자로만 나타날 수 있는 여러 헤더 및 시퀀스 줄이 있는 fasta 파일이라고 가정하면 >다음 >을 수행할 수 있습니다.

sed 's/^ *>[^ ]* />/' file.fa 

이렇게 하면 0개 이상의 공백으로 시작하고 그 뒤에 a >및 가 오는 줄을 찾아 >줄의 시작부터 첫 번째 공백까지 모든 것을 대체하여 >첫 번째 공백 앞의 모든 것을 효과적으로 제거합니다.

표준 출력으로 인쇄하는 대신 원본 파일을 편집하려면 다음을 사용하십시오.

sed -i.bak 's/^ *>[^ ]* />/' file.fa 

file.fa.bak이렇게 하면 원본 파일의 복사본이 되는 이라는 파일이 생성됩니다 .

답변2

사용sed

$ sed 's/[A-Z][^ ]* //' input_file
>Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;

답변3

사용행복하다(이전 Perl_6)

raku -pe 's/^ \> <(.+?)> Bacteria\; //;' 

즉, -pe익숙한 대체 연산자와 결합된 Raku의 자동 인쇄 라인별 플래그를 사용하십시오 s///. 연산자의 왼쪽 절반은 4개의 정규식 원자, 너비가 0인 ^문자열 시작 원자, 이스케이프된 백슬래시 \>, 탐욕스럽지 않은 .+?임의 문자를 한 번 이상 검색한 다음 단어 를 검색 합니다 Bacteria\;.

탐욕스럽지 않은 .+?원자를 감싸고 있습니다 <(... )>이것이 라쿠의 것입니다캡쳐마크. 4개의 원자(원소)를 모두 검색하지만 <(.+?)>대체 연산자의 오른쪽 절반에 대한 대체만 캡처합니다.

마지막으로 교체 연산자의 오른쪽 절반에는 Raku에게 이를 캡처하고 삭제하도록 지시하는 문자가 포함되어 있지 않습니다("null로 교체").

입력 예:

>AADV02000003.105686.107093 Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;

예제 출력:

>Bacteria;Cyanobacteria;Cyanobacteriia;Cyanobacteriales;

https://docs.raku.org/언어/regexes
https://raku.org/

답변4

나는 사용할 것이다grep대신에. 박테리아 라인만 원하신다면,

grep -o 'Bact.*$' file.fa

원하는 내용이 첫 번째 공백 이후에 나올 수 있는 경우 다음을 사용할 수 있습니다(선행 공백 포함).

grep -o ' .*$' file.fa

">"로 시작하는 줄만 원하고 후행 내용과 일치하려면 다음 두 단계를 수행해야 합니다.

grep '^>.*$' file.fa | grep -o ' .*$'

관련 정보