「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