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

Text 修剪行的第一个字符以匹配第二行的长度,text,awk,trim,fastq,Text,Awk,Trim,Fastq,我正在玩一些fastq文件,从fastq序列的第二行修剪特定序列: 输入示例: @D00733:159:CA65UANXX:8:1214:11297:78554 GTTTTACACAATTATACGGACTTTATCCGCTTTTGTGCCTCTTTAATTTC + BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG @D00733:159:CA65UANXX:8:1214:11297:78555 TATGATTAGATGCGGATTGATCTG

我正在玩一些fastq文件,从fastq序列的第二行修剪特定序列:

输入示例:

@D00733:159:CA65UANXX:8:1214:11297:78554
GTTTTACACAATTATACGGACTTTATCCGCTTTTGTGCCTCTTTAATTTC
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG
@D00733:159:CA65UANXX:8:1214:11297:78555
TATGATTAGATGCGGATTGATCTGATCGGGACTGATTTTTTTTAGGGATT
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG
我从序列中修剪子序列“ttataggactttatc”及其之前的任何内容:

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
哪种方法可以有效地修剪条目(质量)中第四行的开头,以匹配第二行(顺序)的长度?每行由\n个字符分隔,每个条目由4行组成(标识符、序列、+、质量)

预期产出:

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

提前谢谢

对于我们当中的非“生物生理学快客”(那就是我),你的台词总是四人一组。组中的第一个以
@
开头。您希望在任何组的第2行上找到某些内容(从一次运行到下一次运行),如果找到了,请将其与第4行开头的尽可能多的字符一起删除,以使第4行的长度与组的第2行的长度匹配。对的还是没有希望?问题的完美解释!好极了@埃德蒙顿现在应该能为我们解决这个问题;-)哇,这太令人惊讶了,我不想批评你,既然你已经非常友好和简洁地解决了这个问题,但是你似乎只是在寻找每4行中的第2行,而不是从以
@
开头的第二行,那么如果文件中的任何地方有一个空行,或者只有一个标题行,这不会出错吗?如果它是一个痛苦的橄榄球-我只是问。正确。如果发生这种情况,我们需要OP来修复他们的样本输入。
$ awk 'NR%4==2{s=match($0,/TTATACGGACTTTATC/)+RLENGTH} NR%4~/[02]/{$0=substr($0,s)} 1' file
@D00733:159:CA65UANXX:8:1214:11297:78554
CGCTTTTGTGCCTCTTTAATTTC
+
GGGGGGGFGGGGGGGGGGGGEGG
@D00733:159:CA65UANXX:8:1214:11297:78555
TATGATTAGATGCGGATTGATCTGATCGGGACTGATTTTTTTTAGGGATT
+
BBCCCEGGGGGGGFGEGGGDGGGGGGGGGGGGGGFGGGGGGGGGGGGEGG