我有一個文件1.blast
與協調這樣提取行和子上的另一個文件的信息
1 gnl|BL_ORD_ID|0 100.00 33 0 0 1 3
27620 gnl|BL_ORD_ID|0 95.65 46 2 0 1 46
35296 gnl|BL_ORD_ID|0 90.91 44 4 0 3 46
35973 gnl|BL_ORD_ID|0 100.00 45 0 0 1 45
41219 gnl|BL_ORD_ID|0 100.00 27 0 0 1 27
46914 gnl|BL_ORD_ID|0 100.00 45 0 0 1 45
,並用這樣的
>1
TCGACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>2
GCATCTGGGCTACGGGATCAGCTAGGCGATGCGAC
...
>100000
TTTGCGAGCGCGAAGCGACGACGAGCAGCAGCGACTCTAGCTACTG
我序列信息的文件1.fasta
信息我現在正在搜索一個腳本,該腳本從第一列中取出1.blast
並提取這些序列ID(=第一列$1
)加上序列,然後從序列本身除了t從1.fasta
文件,從頭兩場比賽意味着$7
和$8
之間的軟管位置的輸出將
>1
ACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>27620
GTAGATAGAGATAGAGAGAGAGAGGGGGGAGA
...
(請注意,從>1
前三項都沒有按照這個順序)
的標識是連續的,這意味着我可以提取這樣的所需的信息:
awk '{print 2*$1-1, 2*$1, $7, $8}' 1.blast
這使我然後包含在第一列的矩陣的右序列標識符RO w,在第二列中右邊的序列行(=在ID行後面),然後是應該排除的兩個座標。所以基本上是一個矩陣,其中包含1.fasta
的所有必需信息將被提取
不幸的是,我沒有太多的腳本經驗,因此我現在有點迷路了,我如何輸入數據在適當的sed
命令? 我能得到特定的行這樣的:
sed -n 3,4p 1.fasta
而且我想刪除例如串通過
sed -n 5p 1.fasta | awk '{print substr($0,2,5)}'
但我的問題是現在,我怎麼能管從第一awk
呼叫到其他命令,讓他們提取右行,從序列行,那麼定座標刪除信息。因此,substr
不是正確的命令,我需要一個命令remstr(string,start,stop)
,從給定的字符串中移除這兩個位置之間的所有內容,但我認爲我可以在自己的腳本中完成。特別是正確的管道對我來說是個問題。
你的最後一個假設是危險的,因爲[fasta-file格式](https://en.wikipedia.org/wiki/FASTA_format)(它的用途往往遠不是標準化的)通常有一個固定的換行符,字符數量。 Bioperl或其他類似的原因之一是各自的方法會考慮(大部分)文件格式的變化。 – thunk
非常感謝!我仍然嘗試通過代碼並理解那裏發生的事情並對其進行調整(例如,腳本的輸出不應包含序列'2',因爲它在'blast'文件中未提及)。但我希望自己能夠從這個角度來解決問題。 –
@thunk,有危險的假設點,但有一點我沒有在這裏提到 - 所有這些練習只是爲了運行某些爆炸搜索,我不使用任何其他工具,我只是在這裏叫fasta,但我做不要在任何其他程序中提供文件,我只需要序列進行第二次高速搜索,以前未找到的部分。 –