ファイル内の特定の場所からシーケンス情報を削除して追加する

ファイル内の特定の場所からシーケンス情報を削除して追加する

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

プログラムはawk3つのブロックに分かれています。

  1. 最初のブロックは最初の行から始まり、2行(シーケンスと一括データヘッダー行)ごとに実行されます。行に関する3ビット情報を3つの変数に保存します。その後すぐに次の入力行にジャンプします。

  2. 2番目のブロックはシーケンス行の最初の6文字を抽出しますがseq、2行目から始まる4行目にのみ適用されます(シーケンス行のみ)。

  3. 最後のブロックは、最初のブロックで処理されていない行(各シーケンスまたは品質データ行)でのみ実行され、出力を構成します。

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

おすすめ記事