2014-11-01 48 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