修剪一行的第一个字符以匹配第二行的长度

Trimming first characters of a line to match length of a second line

我正在玩一些 fastq 文件trim从 fastq 序列的第 2 行中提取特定序列:

输入示例:

@D00733:159:CA65UANXX:8:1214:11297:78554
GTTTTACACAATTATACGGACTTTATCCGCTTTTGTGCCTCTTTAATTTC
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG
@D00733:159:CA65UANXX:8:1214:11297:78555
TATGATTAGATGCGGATTGATCTGATCGGGACTGATTTTTTTTAGGGATT
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG

I trim 来自序列的子序列 'TTATACGGACTTTATC' 及其之前的任何内容:

sed 's/^.*TTATACGGACTTTATC//' in.fastq > in2.fastq

结果如下:

@D00733:159:CA65UANXX:8:1214:11297:78554
CGCTTTTGTGCCTCTTTAATTTC
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG
@D00733:159:CA65UANXX:8:1214:11297:78555
TATGATTAGATGCGGATTGATCTGATCGGGACTGATTTTTTTTAGGGATT
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG

trim 条目中第 4 行的开头(质量)与第 2 行(序列)的长度相匹配的有效方法是什么?每行由 \n 字符分隔,每个条目由 4 行组成(标识符、序列、+、质量)。

预期输出:

@D00733:159:CA65UANXX:8:1214:11297:78554
CGCTTTTGTGCCTCTTTAATTTC
+
GGGGGGGFGGGGGGGGGGGGEGG
@D00733:159:CA65UANXX:8:1214:11297:78555
TATGATTAGATGCGGATTGATCTGATCGGGACTGATTTTTTTTAGGGATT
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG

提前致谢!

$ awk 'NR%4==2{s=match([=10=],/TTATACGGACTTTATC/)+RLENGTH} NR%4~/[02]/{[=10=]=substr([=10=],s)} 1' file
@D00733:159:CA65UANXX:8:1214:11297:78554
CGCTTTTGTGCCTCTTTAATTTC
+
GGGGGGGFGGGGGGGGGGGGEGG
@D00733:159:CA65UANXX:8:1214:11297:78555
TATGATTAGATGCGGATTGATCTGATCGGGACTGATTTTTTTTAGGGATT
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG