1

次のような多くのエントリで構成されるファイルがあります。

>1761420406686363113470.1
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA

つまり、 > で始まるヘッダー行と、多数のシーケンス行の後にヘッダー行が続きます。>で始まる行のみに移動し(シーケンス行ではなく)、最初の10桁を除くすべてを削除するsedスクリプトを作成しようとしています。

これと似たような質問がたくさんありますが、私にはわかりません。私はこのコードのバリエーションを試してきました:

sed 's/^>..........*/^>........../' input.fasta

しかし、明らかにそれを正しく行っていません..

4

4 に答える 4

3

これはうまくいくかもしれません(GNU sed):

sed -r 's/^(>.{10}).*/\1/p;d' file

シーケンス行を保持したい場合は、これにより、置換された行を除くすべての行が削除されます。

sed -r 's/^(>.{10}).*/\1/' file

法案に適合する必要があります。

于 2013-06-10T20:56:33.730 に答える
1

括弧内の最初の 10 文字をキャプチャする必要があります。

sed -e 's/^\(>..........\).*/\1/'

に短縮することができます

sed -e 's/^\(>.\{10\}\).*/\1/'
于 2013-06-10T20:56:32.790 に答える
1

sed の代わりに、cut を使用します

$ echo ">1761420406686363113470.1" | cut -c1-11
>1761420406

で始まる行を操作するに>は、bash-while-loop でラップします

$ while read line; do if [[ $line == \>* ]]; then cut -c1-11 <<< $line; else echo $line; fi done < input
>1761420406
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA

またはawkを使用:

$ awk '{if ($0 ~ />/){print substr($0,0,11)}else{print}}' input
>1761420406
CAAGATTCTGAGATAATCGCGGTTTAAAGTTTCAAATTTGTTTCGGCCGATTCGAAGTCA
于 2013-06-10T20:57:44.413 に答える
0

良いsed回答が既に投稿されているので、ここに `GNU-awk ソリューションがあります。

gawk '/^>/{print gensub(/(.{11}).*/,"\\1","G",$1);next }1' inputFile
于 2013-06-10T21:11:39.097 に答える