スペインからこんにちは。私は 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 を使用すると、すべてをまとめて書くほど単純ではないことがわかります。それで、手伝ってくれませんか?