最初の行の一部と、次の行に追加のテキスト文字列を追加したいRNAシーケンスのfastqファイルがあります。
私のファイルの最初の8行は次のとおりです。
@V300088128L1C001R0010000004#TCCTCGCATG/1
TTCAAGTAATCCAGGATAGGCT
+
FFDFFFFFFFFGFFFFFFFFFF
@V300088128L1C001R0010000019#CTGATATAGA/1
GTGGATCACTTGGCTCGGGA
+
F:FFFGF?FGGFFFFGFFEE
@で始まる各行の#と/ 1の間の部分を次の行の最後までコピーしてから、文字列をコピーしたいと思います。AGTCGGAGGC。結果は次のとおりです。
@V300088128L1C001R0010000004#TCCTCGCATG/1
TTCAAGTAATCCAGGATAGGCTTCCTCGCATGAGTCGGAGGC
+
FFDFFFFFFFFGFFFFFFFFFF
@V300088128L1C001R0010000019#CTGATATAGA/1
GTGGATCACTTGGCTCGGGACTGATATAGAAGTCGGAGGC
+
F:FFFGF?FGGFFFFGFFEE
確認しましたテキストを見つけてコピーしてファイルの次の行に挿入するにはどうすればよいですか?ただし、この例では、既存の行に追加されるのではなく、新しい行が挿入されます。また、以下を試しましたが、検索された文字列を(すでに存在する)末尾に追加/コピーする方法がわかりません。次へワイヤー。
sed -E 's%#(.*)/%$\1AGTCGGAGGC%g' test3.txt > test3new.txt
答え1
$ cat tst.awk
str != "" { $0 = $0 str "AGTCGGAGGC"; str="" }
match($0,"#.*/") { str = substr($0,RSTART+1,RLENGTH-2) }
{ print }
$ awk -f tst.awk file
@V300088128L1C001R0010000004#TCCTCGCATG/1
TTCAAGTAATCCAGGATAGGCTTCCTCGCATGAGTCGGAGGC
+
FFDFFFFFFFFGFFFFFFFFFF
@V300088128L1C001R0010000019#CTGATATAGA/1
GTGGATCACTTGGCTCGGGACTGATATAGAAGTCGGAGGC
+
F:FFFGF?FGGFFFFGFFEE
答え2
使用sed
:
sed -E '/^@/{ N; s/^(.*)#(.*)\/1(.*)/\1#\2\/1\3\2AGTCGGAGGC/; }' infile
1行で始まる場合は、追加の行を@
読みN
、後でそれを返し、注文の要件に従って追加するために使用する3つのグループをキャプチャします2AGTCGGAGGC
。
答え3
awkとの組み合わせを使用することをお勧めします。シーケンスキット。次のコマンドは、データを操作しやすいタブで区切られたファイルに変換し、fastqに復元します。
seqkit fx2tab text.fq | awk '{ tag=$1; gsub(/(^.*#)|(\/1$)/,"" , tag); print $1 "\t" $2 tag "\t" $3 "FFFFFFFFFF"}' | seqkit tab2fx
その後、正しいfastq形式を維持するためにphred + 33を使用した品質スコアの拡張を含む、希望の出力を得ることができます。
@V300088128L1C001R0010000004#TCCTCGCATG/1
TTCAAGTAATCCAGGATAGGCTTCCTCGCATG
+
FFDFFFFFFFFGFFFFFFFFFFFFFFFFFFFF
@V300088128L1C001R0010000019#CTGATATAGA/1
GTGGATCACTTGGCTCGGGACTGATATAGA
+
F:FFFGF?FGGFFFFGFFEEFFFFFFFFFF
ラベルのサイズが可変の場合は、見つかったコードに応じて次のバリアントを使用できます。ここ:
seqkit fx2tab text.fq | awk ' function str_repeat(s1, n1) {s2 = ""; for (n2 = 1; n2 <= n1; n2++) {s2 = s2 s1} return s2 }; {tag=$1; gsub(/(^.*#)|(\/1$)/,"" , tag); print $1 "\t" $2 tag "\t" $3 str_repeat("F", length(tag)) }'
答え4
GNU sed
拡張正規表現パターンを使用して、-E
最後の行ではない限り、次の行を@行に貼り付けます。次に、#と/ 1の間のテキストをつかみ、正規表現に\ nを入れて、そのテキストが@行から出ていることを確認してから、パターンスペースの最後に貼り付けます。
sed -Ee '
/@/{$!N;}
s|#(.*)/1.*\n.*|&\1AGTCGGAGGC|
' file