Bash
用於搜尋 DNA 密碼子的正則表達式語法
我必須為分配編寫一個腳本,它將文件名作為命令並輸出文件中每個唯一的 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
。
要從單個文件中獲取所有完整密碼子:
{ for (pos = 1; pos < length - 1; ++pos) { codon = substr($0, pos, 3) print codon } }
這個簡短的
awk
腳本只輸出每行的每三個字元長的子字元串。在生物資訊學中,它依次輸出每一幀的完整密碼子。對給定數據進行測試:
$ 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
(請注意計數如何更改為 3 而不是 2
cga
)gaa
如果您的數據很大,那麼您將不得不想出其他方法來處理換行符之間的轉換:
{ $0 = lastbit $0 for (pos = 1; pos < length - 1; ++pos) { codon = substr($0, pos, 3) print codon } lastbit = substr($0, length - 1) }
這將保存每行的最後兩個鹼基
lastbit
並將它們添加到序列的下一行。在與上面相同的兩行輸入上執行它:
$ 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
如果您希望輸出按計數按降序排序,請在上面的管道中添加一個額外的步驟。也可以看看: