Bash代码分割每4行然后合并

时间:2011-11-18 19:31:01

标签: bash merge split

也许我的头衔无法完全解释我的意图。 我有一个如下数据列表:

@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

我们可以看到第一行和第五行都是头部/名称,但以#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代码? 感谢

2 个答案:

答案 0 :(得分:3)

sed -n '1,${p;n;n;n;}'应该有助于获得每一行:

[ 11:32 jon@hozbox.com ~/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 jon@hozbox.com ~/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

答案 1 :(得分:0)

我不确定我是否理解你,但是使用GNU sed获得每一行都是微不足道的:

sed '1~4!d' file

group四行,我认为你的意思是将4行减少为一行:

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

这使用您在上面提到的正则表达式,即以#0/1#0/2

结尾的行