2

別のファイルで指定された文字範囲に基づいてセグメントを抽出する必要があるファイルがあります。awkコマンドを使用して実行したいと思います。

ファイル1は次のようになります(1行):

AATTGTGAAGGTAGATGGCTCGCTCCGCGGCGGGGCGCGCGCGCGCGCGCGGGCTCGCTATATAGAGATATATGCGCGCGGCGCGCGGCGCGCGCGGCGCGCGCGTATATATATAGGCGCGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCC

2番目のファイルは次のようになります。

5 10
13 20
22 24

出力は次のようになります。

GTGAAG
AGATGGCT
GCT
4

2 に答える 2

3

このワンライナーはあなたの問題を解決します:

awk 'BEGIN{getline sequence < "first_file"} {print substr(sequence, $1, $2 - $1 + 1) }' second_file

説明:sequenceこのスクリプトは、関数を使用して、指定されたファイルから文字列を読み取りますfirst_file(実際のファイル名に調整します)getline。次に、2番目のファイル(処理する範囲を含む)の各行について、substr関数を使用して必要な部分文字列を抽出します。string( )、position()、length( )のsubstr3つのパラメーターを受け入れます。sequence$1$2 - $1 + 1

于 2012-08-22T19:23:08.317 に答える
1

Nyaはあなたにawk解決策を与えました、これはに基づくものcoreutilsです。

ストリング

AATTGTGAAGGTAGATGGCTCGCTCCGCGGCGGGGCGCGCGCGCGCGCGCGGGCTCGCTATATAGAGATATATGCGCGCGGCGCGCGGCGCGCGCGGCGCGCGCGTATATATATAGGCGCGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAAAATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCCCCCCCCCCCCCC

オフレン

5 10
13 20
22 24

次の方法で必要な出力を取得できます。

while read off len; do cut -c${off}-${len} string; done < offlen

出力:

GTGAAG
AGATGGCT
GCT
于 2012-08-22T20:50:53.673 に答える