패턴으로 시작하는 다음 줄을 삭제합니다.

패턴으로 시작하는 다음 줄을 삭제합니다.

"a" "c" "t" 또는 "g"로 시작하지 않고 다음 줄이 ">"로 시작하는 경우 줄을 삭제하고 싶습니다. 다음 예에서는 "`>seq3"이 제거되었습니다.

입력하다:

>seq1
actgatgac
>seq2
ctgacgtca
>seq3
>seq4
gtagctagt
>seq5
tgacatgca

예상 출력:

>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca

나는 성공하지 못한 채 sed ( sed '/^>.*/{$!N;/^>.*/!P;D}'및 )를 사용해 보았습니다 .sed '/^>/{$d;N;/^[aA;cC;gG;tT]/!D}'

답변1

다음과 같이 시도해 볼 수 있습니다.

$ sed -e '$!N;/^>.*\n>/D' -e 'P;D' file
>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca

그건

  • 두 줄짜리 버퍼를 유지하세요 $!N...P;D
  • 개행 문자로 시작 >하고 >그 뒤에 또 다른 개행 문자가 있는 패턴을 찾습니다.
  • 개행 문자까지 삭제

답변2

이상한 예:

awk 'BEGIN {lasta="XXX"} {if ($0 !~ /^ *>/) printf("%s\n%s\n",lasta,$0);   lasta=$0;}'  fileNAME.txt

동등하다

cat fileNAME.txt | awk 'BEGIN {lasta="XXX"} {if ($0 !~ /^ *>/) printf("%s\n%s\n",lasta,$0);   lasta=$0;}'

답변3

당신이 가지고 있다면pcregrep설치 후 다음을 시도해 볼 수 있습니다.

pcregrep -M  '^>.*\n[^>]' file

설명하다

  • -M여러 줄이 일치하도록 허용
  • >개행 문자로 시작하고 끝나며 뒤에 개행 문자가 오지 않는 패턴을 찾습니다.>

답변4

awk 명령을 사용해 보니 잘 작동합니다.

awk '{a[++i]=$0}/^[actg]/{for(x=NR-1;x<=NR;x++)print a[x]}' file.txt

산출

>seq1
actgatgac
>seq2
ctgacgtca
>seq4
gtagctagt
>seq5
tgacatgca

관련 정보