2014-11-01 51 views
0

我有一个文件,我试图为某些下游分析做准备,但我需要两行中的字符数相同。该文件格式如下,第二行(CTTATAATGCCGCTCCCTAAG)和第四行(bbbeeeeegggggiiiiiiiiigghiiiiiiiiiiiiiiiiiigeccccb)行需要包含相同数量的字符。匹配两行中的字符数

@HWI-ST:8:1101:3346:2198#GTCCGC/1 
CTTATAATGCCGCTCCCTAAG 
+HWI-ST:8:1101:3346:2198#GTCCGC/1 
bbbeeeeegggggiiiiiiiiigghiiiiiiiiiiiiiiiiiigeccccb 
@HWI-ST:8:1101:10491:2240#GTCCGC/1 
GAGTAGGGAGTATACATCAG 
+HWI-ST:8:1101:10491:2240#GTCCGC/1 
abbceeeeggggfiiiiiigg`gfhfhhifhifdgg^ggdf_`_Y[aa_R 
@HWI-ST:8:1101:19449:2134#GTCCGC/1 
AAGAAGAGATCTGTGGACCA 

到目前为止,我掏出从每组四个第二行和生成使用包含每一行的长度的记录文件:

grep -v '[^A-Z]' file.fastq |awk '{ print length($0); }' > newfile 

现在我只是看看找到一条指向这条记录的方法来指导一条sed命令,以便在行尾修剪多少个字符。类似于:

sed -r 's/.{n}$//' file 

用某些正则表达式替换n来引用文本文件。我想知道我是否过于复杂,但我需要这些线路才能完全匹配,所以我一直没有想到另一种方式去实现它。任何帮助将是真棒,谢谢!

+0

它总是第二和第四行吗?只有那两个? – 2014-11-01 19:49:18

回答

0

这可能是你在找什么:

awk ' 
    # If 2nd line of 4-line group, save length as len. 
    NR % 4 == 2 { len = length($0) } 

    # If 4th line of 4-line group, trim the line to len. 
    NR % 4 == 0 { $0 = substr($0, 1, len)} 

    # print every line 
    { print } 
' file 

这假定该文件由四线组,每个组的第二和第四行是你感兴趣的那些的。它还假定每组的第二行不会超过其对应的第四行。

+0

花了我一两分钟才弄清楚背后的逻辑,但是这是完美的!非常感谢你的帮助! – 2014-11-02 01:26:06