パターンで始まる次の行を削除します。

パターンで始まる次の行を削除します。

「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

それは

  • 2行のバッファを維持してください$!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

関連情報