fastqファイルから既知の長さの特定の情報を検索して別の場所に追加する必要があります。
たとえば、次の fastq ファイルが入力として提供されます。
@SRR5394526.1 1 length=150
CGATGTTAAATCAACGATAACTACACCG
+SRR5394526.1 1 length=150
AA<AFJFJJJJJJJJJJAJJJJJJJJJF
私が出力として欲しいもの:
@SRR5394526.1.CGATGT 1 length=150
TAAATCAACGATAACTACACCG
+SRR5394526.1.CGATGT 1 length=150
FJJJJJJJJJJAJJJJJJJJJF
最初の6つのヌクレオチドが2行目の配列と4行目の配列の両方から削除され、1行目と3行目の最初の数字1の後に追加されることがわかります。私のファイルには、このサイズのブロック(4行)が何百万ものあります。これは単なる例です。
sed 's/myinfo/&,/4'
ファイルに情報を追加/追加する方法とファイルから情報を削除する方法を見つけましたが、sed -e '423s!//!!; 424s!printf!//&!'
それだけでは不十分です。どんなアイデアにも感謝します。
ベストアンサー1
使用awk
:
awk '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
(FNR-2) % 4 == 0 { seq=substr($0,1,6) }
{ print name "." seq, chr, len
print substr($0,7) }' file.fastq >newfile.fastq
プログラムはawk
3つのブロックに分かれています。
最初のブロックは最初の行から始まり、2行(シーケンスと一括データヘッダー行)ごとに実行されます。行に関する3ビット情報を3つの変数に保存します。その後すぐに次の入力行にジャンプします。
2番目のブロックはシーケンス行の最初の6文字を抽出しますが
seq
、2行目から始まる4行目にのみ適用されます(シーケンス行のみ)。最後のブロックは、最初のブロックで処理されていない行(各シーケンスまたは品質データ行)でのみ実行され、出力を構成します。
gzip
圧縮ファイルに使用するには(またはbgzip
-生物情報学プロジェクトでよく使われる圧縮ファイル)
zcat file.fastq.gz | awk '...' | bgzip -c >newfile.gz
カット値として変数を使用するには、次の点を考慮してください。
awk -v n=6 '(FNR-1) % 2 == 0 { name=$1; chr=$2; len=$3; next }
(FNR-2) % 4 == 0 { seq=substr($0,1,n) }
{ print name "." seq, chr, len
print substr($0,n+1) }'
-v n=6
切断の長さを制御します。
実際のawk
コード(一重引用符内のすべての内容)を独自のスクリプトファイルに入れて、次のように使用することもできます。
awk -v n=6 -f script.awk file.fastq