2011-11-18 16 views
2

也许我的标题不能完全解释我的意图。 我有数据列表如下图所示:Bash代码分裂每​​4行然后合并

@HWI-ST150_0129:3:8:21208:93107#0/1 
TGTCTAGTTTTTATAGGAAGATATTTCCTTTTCTACCTTTGACTTCAAAGCGGCTGAAATCTCCACTTGCAAATTCCACAAAAAGAGTGTTACAAGTCT 
+ 
Yeeeeeeeeeceed]dddddd^YdceeeedaeeddYccccc\ddceeYeYY`[`bcYc^_XY^_]d^dd`abdddee\e\ddLb]`_`cTbbbYbaM_] 
@HWI-ST150_0129:3:8:21208:93107#0/2 
TTTGTAAAGTCTGCACGTGGATAACTTGACCACTTAGAGGCCTTCGTTGGAAACGGGTTTTTTTCATGTAAGGCTAGACAGAAGAATTCTCAGTAACTTCAAGTTACTGAGAATTCTTCTGTCTAGCCTTACATGAAAAAAACCCGTTTCCAACGAAGGCCTCTAAGTGGTCAAGTTATCCACGTGCAGACTTTACAAA 
+ 
ffcaefffcdeeeeeeeeeedff^f`\\eeedaec^d^d`deaffeeTecb^bbbddadYcccW[X\MZ\XaU_UTI\]TZ]K[VQX^aIb`b`^X^YSYHWI-ST150_0129:3:8:21208:93107#0 

我们可以看到第一线和5日线都是头/名称,但无论是#0/1或#0/2结束。现在我希望将每4行分组,但后来将所有#0/1和#0/2合并在一起。

应该是这样的:

@HWI....#0/1 
TTCCGC 
+ 
cffccc 
@HWI....#0/1 
CCGGGG 
+ 
abbcgg 
.... 

也是另一个文件是: @HWI ....#0/1 ATTCCG + fccfcc @HWI ....#0/1 CGCCGG + gbbcaa

我知道如何用一个简单的python脚本来做到这一点。但只是想知道我们是否只能用一些非常简单的bash代码来做呢? 感谢

回答

3

sed -n '1,${p;n;n;n;}'应该让每4个行工作:

[ 11:32 [email protected] ~/SO/bash ]$ cat blah | sed -n '1,${p;n;n;n;}' 
@HWI-ST150_0129:3:8:21208:93107#0/1 
@HWI-ST150_0129:3:8:21208:93107#0/2 

[ 11:33 [email protected] ~/SO/bash ]$ cat blah 
@HWI-ST150_0129:3:8:21208:93107#0/1 
TGTCTAGTTTTTATAGGAAGATATTTCCTTTTCTACCTTTGACTTCAAAGCGGCTGAAATCTCCACTTGCAAATTCCACAAAAAGAGTGTTACAAGTCT 
+ 
Yeeeeeeeeeceed]dddddd^YdceeeedaeeddYccccc\ddceeYeYY`[`bcYc^_XY^_]d^dd`abdddee\e\ddLb]`_`cTbbbYbaM_] 
@HWI-ST150_0129:3:8:21208:93107#0/2 
TTTGTAAAGTCTGCACGTGGATAACTTGACCACTTAGAGGCCTTCGTTGGAAACGGGTTTTTTTCATGTAAGGCTAGACAGAAGAATTCTCAGTAACTTCAAGTTACTGAGAATTCTTCTGTCTAGCCTTACATGAAAAAAACCCGTTTCCAACGAAGGCCTCTAAGTGGTCAAGTTATCCACGTGCAGACTTTACAAA 
+ 
ffcaefffcdeeeeeeeeeedff^f`\\eeedaec^d^d`deaffeeTecb^bbbddadYcccW[X\MZ\XaU_UTI\]TZ]K[VQX^aIb`b`^X^YSYHWI-ST150_0129:3:8:21208:93107#0 

Useful One-Line Scripts For sed
man sed

+2

无用使用猫| sed;)参见http://partmaps.org/era/unix/award.html –

+0

@sputnick是的,我知道'sed -n'1,$ {p; n; n; n;}'FILE'就像好吧,但现在它的这种习惯是“猫”的一切= p。它不像'猫FILE |'那么糟糕尽管= p。 – chown

0

我不知道我理解你,但是让每4行是琐碎GNU sed的:

sed '1~4!d' file 

group分四行,通过该我想你的意思是减少4行到一个:

sed '/#0\/[12]$/{N;N;N;s/\n//;d}' file 

这使用您上面即在#0/1#0/2结束的行中提到的正则表达式