파일의 모든 항목과 단어 >
사이의 부분을 삭제하고 싶습니다.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;
답변4
나는 사용할 것이다grep대신에. 박테리아 라인만 원하신다면,
grep -o 'Bact.*$' file.fa
원하는 내용이 첫 번째 공백 이후에 나올 수 있는 경우 다음을 사용할 수 있습니다(선행 공백 포함).
grep -o ' .*$' file.fa
">"로 시작하는 줄만 원하고 후행 내용과 일치하려면 다음 두 단계를 수행해야 합니다.
grep '^>.*$' file.fa | grep -o ' .*$'