-2

スペインからこんにちは。私は AWK を学んでおり、パイプを使用して Linux ターミナルからコマンドを実行する方法を知っていますが、AWK スクリプトを記述できるようになりたいと考えています。あなたが私を助けることができるかどうか見てみましょう。

次のコードがあります。

awk '{if (NR!=1) {printf $0}}' sequence.fasta |
awk '{sub(/ATG/, "\n&")}{print}' |
awk 'NR == 2' | awk '{gsub(/.../, "& ")}1' |
awk '{for (i=1; i<=NF; i++) {printf $i" "; if ($i~/TAA/ || $i~/TAG/ || $i~/TGA/) {exit}}}' |
fold -w 60

FASTA ファイルから、このスクリプトは開始コドン (ATG) から停止コドン (TAA、TAG または TGA) までを示します。FASTA ファイルの構造は次のとおりです。

>sequence.fasta
GATCCAAAACACATTCTCCCTGGTAGCATGGACAAGCAACATTTTGGGAGAAATGGAGCAAAAAAACATA
AACTTCACAGTAACAAACATAAACACTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTC
TCTCTCTCCACACACACACACACTCGCACTCACAGCCTCACAACACAGGTATACATGTTTACTTAGGTCA
CTCAGAATTGTAAACTGTAAGTGTGCCTTGCAAAGAACCACTGCTCCTTACAGTGAGCAGTGCTTACCTG
GTGCTTACCTGAAGAAGATATAGCTCCTTAAAGAGTAAATGAATAAATACCTTAAGTAAGTTTGGGAAAC

上記のコードを適用すると、次の出力が得られます。

ATG GAC AAG CAA CAT TTT GGG AGA AAT GGA GCA AAA AAA CAT AAA 
CTT CAC AGT AAC AAA CAT AAA CAC TCT CTC TCT CTC TCT CTC TCT 
CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CCA CAC ACA CAC ACA 
CTC GCA CTC ACA GCC TCA CAA CAC AGG TAT ACA TGT TTA CTT AGG 
TCA CTC AGA ATT GTA AAC TGT AAG TGT GCC TTG CAA AGA ACC ACT 
GCT CCT TAC AGT GAG CAG TGC TTA CCT GGT GCT TAC CTG AAG AAG 
ATA TAG 

だから、私のコードはそれを行います:

ヘッダーを除くすべてのシーケンスをまとめて出力します。Printf は \n なしで印刷します。

awk '{if (NR!=1) {printf $0}}' sequence.fasta

最初のATGを探して新しいラインを導入。

awk '{sub(/ATG/, "\n&")}{print}'

ATG の開始時に新しい行を導入したので、行 1 (5'-UTR) を無視して行 2 を選択します。

awk 'NR == 2'

ここで、スペースで区切られたコドンを作成します。

awk '{gsub(/.../, "& ")}1'

さて、ループでストップコドンを探します。が見つかると、ループが停止します。

awk '{for (i=1; i<=NF; i++) {printf $i" "; if ($i~/TAA/ || $i~/TAG/ || $i~/TGA/) {exit}}}'

より見やすくするために、幅を 60 文字に固定しています。

fold -w 60

それで、すべてを にまとめようとしましたが、うまくいきscript.awkません。awk を使用すると、すべてをまとめて書くほど単純ではないことがわかります。それで、手伝ってくれませんか?

4

1 に答える 1

2

あなたがしようとしているのは、最初の行をスキップしてから、ファイル内の最初の「ATG」から最初に出現する TAA、TGA、または TAG までを 3 文字の組み合わせで印刷し、それらを行に印刷することだけのようです。 15列の。もしそうなら、それは単にこれです:

$ cat file
>whatever
GATCCAAAACACATTCTCCCTGGTAGCATGGACAAGCAACATTTTGGGAGAAATGGAGCAAAAAAACATA
AACTTCACAGTAACAAACATAAACACTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTC
TCTCTCTCCACACACACACACACTCGCACTCACAGCCTCACAACACAGGTATACATGTTTACTTAGGTCA
CTCAGAATTGTAAACTGTAAGTGTGCCTTGCAAAGAACCACTGCTCCTTACAGTGAGCAGTGCTTACCTG
GTGCTTACCTGAAGAAGATATAGCTCCTTAAAGAGTAAATGAATAAATACCTTAAGTAAGTTTGGGAAAC
$
$ cat tst.awk
NR>1 { rec = rec $0 }
END {
    if ( match(rec,/ATG/) ) {
        rec = substr(rec,RSTART)
        gsub(/.../,"& ",rec)
        match(rec,/(TAA|TAG|TGA) /)
        rec = substr(rec,1,RSTART+RLENGTH-2)
        gsub(/(... ){15}/,"&\n",rec)
        print rec
    }
}
$
$ awk -f tst.awk file
ATG GAC AAG CAA CAT TTT GGG AGA AAT GGA GCA AAA AAA CAT AAA
CTT CAC AGT AAC AAA CAT AAA CAC TCT CTC TCT CTC TCT CTC TCT
CTC TCT CTC TCT CTC TCT CTC TCT CTC TCT CCA CAC ACA CAC ACA
CTC GCA CTC ACA GCC TCA CAA CAC AGG TAT ACA TGT TTA CTT AGG
TCA CTC AGA ATT GTA AAC TGT AAG TGT GCC TTG CAA AGA ACC ACT
GCT CCT TAC AGT GAG CAG TGC TTA CCT GGT GCT TAC CTG AAG AAG
ATA TAG
$
于 2013-11-08T16:51:42.477 に答える