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.fasta
このようなシーケンス情報を含むファイル
>1
TCGACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>2
GCATCTGGGCTACGGGATCAGCTAGGCGATGCGAC
...
>100000
TTTGCGAGCGCGAAGCGACGACGAGCAGCAGCGACTCTAGCTACTG
私は今、最初の列から取得し1.blast
、それらのシーケンス ID (=最初の列) とシーケンスを抽出し、次にシーケンス自体からファイル間の位置とファイルからの$1
位置を除くすべてを抽出するスクリプトを検索しています。つまり、最初の 2 つの一致から出力が$7
$8
1.fasta
>1
ACTAGCTACGACTCGGACTGACGAGCTACGACTACGG
>27620
GTAGATAGAGATAGAGAGAGAGAGGGGGGAGA
...
>1
( の最初の 3 つのエントリはこの順序ではないことに注意してください)
ID は連続しています。つまり、必要な情報を次のように抽出できます。
awk '{print 2*$1-1, 2*$1, $7, $8}' 1.blast
これにより、最初の列に正しいシーケンス識別子行、2 番目の列に正しいシーケンス行 (= ID 行の 1 つ後)、および除外する必要がある 2 つの座標を含むマトリックスが得られます。1.fasta
したがって、基本的には、要素が抽出されるすべての必要な情報を含むマトリックス
残念ながら、私はスクリプト作成の経験があまりないため、適切なsed
コマンドなどで値を入力する方法がわかりません。次のような特定の行を取得できます。
sed -n 3,4p 1.fasta
そして、例えば経由で削除したい文字列
sed -n 5p 1.fasta | awk '{print substr($0,2,5)}'
しかし、私の問題は、最初のawk
呼び出しからの情報を他のコマンドにパイプして、正しい行を抽出し、シーケンス行から指定された座標を削除する方法です。したがって、substr
正しいコマンドではありません。特定の文字列からこれら 2 つの位置の間のすべてを削除するコマンドが必要remstr(string,start,stop)
ですが、独自のスクリプトで実行できると思います。特に正しい配管は、ここで私にとって問題です。