18

次の形式 (FASTQ と呼ばれる) の 4 つのブロックで常に来るデータがあります。

@SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
+SRR018006.2016 GA2:6:1:20:650 length=36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+!
@SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SRR018006.19405469 GA2:6:100:1793:611 length=36
7);;).;);;/;*.2>/@@7;@77<..;)58)5/>/

それらをこの形式(FASTAと呼ばれる)に変換する簡単なsed / awk / bashの方法はありますか:

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

原則として、各ブロック 4 の最初の 2 行を抽出し@>.

4

13 に答える 13

26

これは古い質問であり、さまざまな解決策が提供されてきました。受け入れられた回答はsedを使用していますが、明らかな問題があります(@記号が品質行の最初の文字として表示される場合、@が>に置き換えられるということです)、実際に機能する単純なsedベースのソリューションを提供せざるを得ないと感じています:

sed -n '1~4s/^@/>/p;2~4p' 

唯一の仮定は、各読み取りが FASTQ ファイルで正確に 4 行を占めるということですが、私の経験では、それはかなり安全に思えます。

fastx ツールキットの fastq_to_fasta スクリプトも機能します。(現在一般的な Phred+33 qual エンコーディングに対応するには、-Q33 オプションを指定する必要があることに注意してください。とにかく、品質データを破棄しているので、これはおかしいです!)

于 2012-04-28T00:19:07.207 に答える
9

Cock, et al (2009) NAR で詳述されているように、「'@' マーカー文字 (ASCII 64) は品質文字列のどこにでも出現する可能性があるため、これらの解決策の多くは正しくありません。これは、パーサーがで始まる行を処理してはならないことを意味します。 「@」は次のレコードの開始を示すものであり、これまでの品質文字列の長さがシーケンスの長さと一致することを追加で確認することはありません。」

詳細については、http: //ukpmc.ac.uk/articlerender.cgi?accid=PMC2847217を参照してください。

于 2010-05-09T20:06:48.470 に答える
9

シードは死んでいません。ゴルフをしている場合:

sed '/^@/!d;s//>/;N'

または、Pierre によって投稿されたhttp://www.ringtail.tsl.ac.uk/david-studholme/scripts/fastq2fasta.plをエミュレートすると、最初の行から最初の単語 (id) のみが出力され、(いくつかの) エラーが発生します。取り扱い:

#!/usr/bin/sed -f
# Read a total of four lines
$b error
N;$b error
N;$b error
N
# Parse the lines
/^@\(\([^ ]*\).*\)\(\n[ACGTN]*\)\n+\1\n.*$/{
  # Output id and sequence for FASTA format.
  s//>\2\3/
  b
}
:error
i\
Error parsing input:
q

これらのフォーマットを変換する既存のツールはたくさんあるようです。ここに投稿されたもの (上記を含む) の代わりに、おそらくこれらを使用する必要があります。

于 2009-10-09T14:45:31.543 に答える
7

ただawk、他のツールは必要ありません

# awk '/^@SR/{gsub(/^@/,">",$1);print;getline;print}' file
>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
于 2009-10-09T11:57:09.287 に答える
4

http://www.ringtail.tsl.ac.uk/david-studholme/scripts/のfastq2fasta.plを参照してください。

于 2009-10-09T07:45:23.820 に答える
3

私は書くだろう

awk '
    NR%4 == 1 {print ">" substr($0, 2)}
    NR%4 == 2 {print}
' fastq > fasta
于 2011-06-30T22:33:48.867 に答える
2

これは私が持っている最速のもので、.bashrc ファイルに貼り付けました。

alias fq2fa="awk '{print \">\" substr(\$0,2);getline;print;getline;getline}'"

@... で始まる、まれではあるが不可能ではない品質の行では失敗しませんが、ラップされた FASTQ では失敗します。

于 2011-10-27T23:06:31.307 に答える
1
awk 'BEGIN{P=1}{if(P==1||P==2){gsub(/^[@]/,">");print}; if(P==4)P=0; P++}' data

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

below

awk '{gsub(/^[@]/,">"); print}' data

where data is your data file. I've received:

>SRR018006.2016 GA2:6:1:20:650 length=36
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
+SRR018006.2016 GA2:6:1:20:650 length=36
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+!
>SRR018006.19405469 GA2:6:100:1793:611 length=36
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+SRR018006.19405469 GA2:6:100:1793:611 length=36
7);;).;);;/;*.2>/@@7;@77<..;)58)5/>/
于 2009-10-09T07:38:33.573 に答える
1

Here's the solution to the "skip every other line" part of the problem that I just learned from SO:

while read line
do
    # print two lines
    echo "$line"
    read line_to_print
    echo "$line_to_print"

    # and skip two lines
    read line_to_skip
    read line_to_skip
done

If all that needs to be done is change one @ to >, then I reckon

while read line
do
    echo "$line" | sed 's/@/>/'
    read line
    echo "$line"

    read line_to_skip
    read line_to_skip
done

will do the job.

于 2009-10-09T07:39:06.273 に答える
1

Something like:

awk 'BEGIN{a=0}{if(a==1){print;a=0}}/^@/{print;a=1}' myFastqFile | sed 's/^@/>/'

should work.

于 2009-10-09T07:39:40.920 に答える
1

I think, with gnu grep this could be done with this:

grep -A 1 "^@" t.txt | grep -v "^--" | sed -e "s/^@/\>/"
于 2009-10-09T07:40:23.797 に答える
1

私は将来の道を歩んでいることを知っていますが、グーグル社員の利益のために:

fastx ツールキットの fastq_to_fastaを使用することもできます。ただし、@ 記号は保持されます。また、そうしないように指示しない限り、Ns を含む行も削除します。

于 2011-06-30T19:21:45.140 に答える