特定のDNA塩基配列がファイルに表示される回数を探す

特定のDNA塩基配列がファイルに表示される回数を探す

aac指定されたファイルで特定のシーケンス(例:)が発生した回数を示す「countmatches」と呼ばれるbashスクリプトを作成することが課題です。スクリプトには少なくとも2つのパラメータが必要です。そのうちの最初のパラメータは、提供された有効なDNA文字列を含むファイルのパス名でなければなりません。残りのパラメータは、base acおよびg任意の順序で含まれる文字列です。t各有効なパラメータ文字列に対してファイルからDNA文字列を取得し、DNA文字列(つまりファイル)でそのパラメータ文字列が重複しない回数を計算します。

サンプルシーケンスと出力が文字列aaccgtttgtaaccggaacというファイルにある場合、dnafileスクリプトは次のように動作するはずです。

$ countmatches dnafile ttt
ttt 1

コマンドは、countmatches dnafile ttt出力は、ttt 1ディスプレイはttt一度表示されます。

これは私のスクリプトです。

#!/bin/bash
for /data/biocs/b/student.accounts/cs132/data/dna_textfiles
do
        count=$grep -o '[acgt][acgt][acgt]' /data/biocs/b/student.accounts/cs132/data/dna_textfiles | wc -w
        echo {$/data/biocs/b/student.accounts/cs132/data/dna_textfiles} ${count}
done

これは私が得るエラーです

[Osama.Chaudry07@cslab5 assignment3]$ ./countmatches /data/biocs/b/student.accounts/cs132/data/dna_textfiles aac
./countmatches: line 6: '/data/biocs/b/student.accounts/cs132/data/dna_textfiles': not a valid identifier

ベストアンサー1

cat dna_textfile 
aaccgtttgtaaccggaac 

#!/bin/bash    
dna_file=/path/to/dna_textfiles
printf "\e[31mNucleotide sequence?:";
read -en 3 userInput
while [[ -z "${userInput}" ]]
do
read -en 3 userInput
done

count=$(grep -o "${userInput}" "${dna_file}" | wc -l)

echo "${userInput}", ${count}

出力:

 ttt, 1

#!/bin/bash
#set first and second arguments (dnafile and base respectively)

dir=$1
base=$2

count=$(grep -o ${base} ${dir} | wc -l)

echo "${base}", "${count}"

出力:

$ ./countmatches dnafile ttt
ttt, 1

@Kusalanandaでコメントに返信

上記の解決策が重要です。重複なし文字列で発生した回数。たとえば、文字列「acacaca」には、「aca」が重ならない2つの項目と「aca」が3つ重なっている場合があります。計算のため重なる発生回数:

#!/bin/bash
#set first and second arguments (sequence and base respectively)  
sequence=$1
base=$2
diff_sequence_base=$((${#sequence} - ${#base} | bc))

for ((i=0; i <= ${diff_sequence_base}; i++)); do
       [ ${sequence:i:${#base}} = $base ] && ((count++))

done
echo $base, $count


$ ./countmatches acacaca aca
aca, 3


$ ./countmatches aaccgtttttaaccggaac ttt
ttt, 3

おすすめ記事