2015-06-24 70 views
0

我有兩個包含生物DNA序列數據的文件。這些文件中的每一個都是python腳本的輸出,該腳本根據序列開始處的DNA條形碼將每個DNA序列分配給樣本ID。這些.txt文件中的一個的輸出是這樣的:修改行名以避免在終端中合併文件時的冗餘

>S066_1 IGJRWKL02G0QZG orig_bc=ACACGTGTCGC new_bc=ACACGTGTCGC bc_diffs=0 
TTAAGTTCAGCGGGTATCCCTACCTGATCCGAGGTCAACCGTGAGAAGTTGAGGTTATGGCAAGCATCCATAAGAACCCTATAGCGAGAATAATTACTACGCTTAGAGCCAGATGGCACCGCCACTGATTTTAGGGGCCGCTGAATAGCGAGCTCCAAGACCCCTTGCGGGATTGGTCAAAATAGACGCTCGAACAGGCATGCCCCTCGGAATACCAAGGGGCGCAATGTGCGTCCAAAGATTCGATGATTCACTGAATTCTGCAATTCACATTACTTATCGCATTTCGCAGCGTTCTTCATCGATGACGAGTCTAG 
>S045_2 IGJRWKL02H5XHD orig_bc=ATCTGACGTCA new_bc=ATCTGACGTCA bc_diffs=0 
CTAAGTTCAGCGGGTAGTCTTGTCTGATATCAGGTCCAATTGAGATACCACCGACAATCATTCGATCATCAACGATACAGAATTTCCCAAATAAATCTCTCTACGCAACTAAATGCAGCGTCTCCGTACATCGCGAAATACCCTACTAAACAACGATCCACAGCTCAAACCGACAACCTCCAGTACACCTCAAGGCACACAGGGGATAGG 

第一行是序列ID,和DNA序列中的第二行。 S_066在ID的第一部分中指示該序列來自樣本066,並且_1指示其文件中的第一序列(而不是來自S_066本身的第一序列)。由於正在使用DNA測序技術的細微差別,我需要從原始測序文件中生成兩個像這樣的文件,結果是一個輸出,其中有兩個文件,然後我使用cat合併在一起。到現在爲止還挺好。

我工作流中的下一個下游步驟不允許使用相同的樣本名稱。現在,它會遇到一些相同的序列ID,因此會出錯,並關閉。因此,這兩個文件中的第400個序列必須屬於同一個樣本,或者其他內容,從而生成相同的樣本ID(即,這兩個文件可能都有S066_400)。

我想要做的是使用一些代碼在_之後立即在第二個文件的每一行上插入一個數字(1000 ,, 4971,無論什麼),從第一行開始。這樣ID就不會被混淆,我可以繼續。因此,它將覆蓋S066_2S066_24971S066_49712。部分問題是ID的長度可能變化,因此它可能以S066_49BBT1_開頭。

+0

作爲一個旁註:爲什麼地球上你想這樣做在bash? –

回答

1

嘗試:

awk '/^\>/ {$1=$1 "_13"} {print $0}' filename > tmp.tmp 
mv tmp.tmp filename 
+0

兩件事 - 1.只能從第二個樣品ID開始,然後繼續。它不包括第一個樣本ID。 2.這會在每個ID的末尾添加一個_13。所以'S066_02'現在讀作'S066_02_13'。不過,我需要更類似於'S066_0213'或'S066_1302'的東西。對不起,如果我不清楚,我已經澄清上述。 – colin

+0

好吧,所以我修改了自己解決第二部分。我只需要它從文件的第一行開始,而不是第三行。 – colin

+0

這是正確的。我忘了將我的文本文件轉換爲純文本格式,這就產生了第一行問題。 – colin