ファイル名をコマンドとして使用し、ファイル内の3つのデフォルトのコドンと降順で表示される回数を出力するジョブのスクリプトを作成する必要があります。スクリプトはパラメータがあることを確認し、そうでない場合はエラーメッセージを印刷する必要があります。スクリプトですべてのユニークなコドンを取得するために必要な正規表現の構文と起動方法が混乱しています。要点は、ファイルにランダムな順序で繰り返される「a」「c」「t」「g」文字のみが含まれていることです。目標はファイルの先頭から始まり、それぞれの固有の3文字コドンとその数(例:aacまたはacg)
たとえば、dnafile というファイルに aacacgaactttaacacg パターンが含まれている場合、スクリプトは次の入出力を使用します。
$script dnafile
aac 3
acg 2
ttt 1
エラーチェックでエラーが表示されたら、それが必要ですscript cannot open file dnafile for reading
。
答え1
みんな手に入れよう十分単一ファイルのコドン:
{
for (pos = 1; pos < length - 1; ++pos) {
codon = substr($0, pos, 3)
print codon
}
}
この短いawk
スクリプトは、各行の各3文字の長い部分文字列を出力します。バイオインフォマティクスという用語で言えば、各フレームの完全なコドンを順番に出力します。
与えられたデータをテストします。
$ awk -f script.awk <file
aac
aca
cac
acg
cga
gaa
aac
act
ctt
ttt
tta
taa
aac
aca
cac
acg
その後、各コドンの発生回数をソートして計算することができる。
$ awk -f script.awk <file | sort | uniq -c
3 aac
2 aca
2 acg
1 act
2 cac
1 cga
1 ctt
1 gaa
1 taa
1 tta
1 ttt
ファイルに改行文字が含まれている場合は、改行文字によってコドンが破損する可能性があるように、まずそれらを削除してください。
$ cat file
aacacgaactttaacacg
aacacgaactttaacacg
$ tr -d '\n' <file | awk -f script.awk | sort | uniq -c
6 aac
4 aca
4 acg
2 act
4 cac
3 cga
2 ctt
3 gaa
2 taa
2 tta
2 ttt
(合意数が2ではなく3にどのようにcga
変更されるかを確認してください。)gaa
あなたのデータ大きいでは、改行文字の変換を処理する別の方法を見つける必要があります。
{
$0 = lastbit $0
for (pos = 1; pos < length - 1; ++pos) {
codon = substr($0, pos, 3)
print codon
}
lastbit = substr($0, length - 1)
}
これにより、各行の最後の2つの塩基が保存され、lastbit
シーケンスの次の行の前に追加されます。
上記と同じ2行の入力を実行します。
$ awk -f script.awk <file | sort | uniq -c
6 aac
4 aca
4 acg
2 act
4 cac
3 cga
2 ctt
3 gaa
2 taa
2 tta
2 ttt
最初のフレームのコドンだけが必要な場合:
{
$0 = lastbit $0
for (pos = 1; pos < length - 1; ++pos) {
if ((pos + length(lastbit)) % 3 == 1) {
codon = substr($0, pos, 3)
print codon
}
}
lastbit = substr($0, length - 1)
}
sort -nr
出力を数の降順で並べ替えるには、上記のパイプラインに追加の手順を追加します。
また見なさい:
答え2
次のように、外部ファイルなしで1行でこれを行うことができます。
tr -d '\n' <dnafile |sed -e 's/\(...\)/\1\n/g' |sort |uniq -c |sed 's/^\s*\([0-9]*\) \([acgt]*\)$/\2 \1/'
aac 3
acg 2
ttt 1
指定された順序の列が必要でない場合は、後半を省略できますuniq -c
。 Macでこれを行うgsed
場合sed
。