"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