0

このコードは、必要な遺伝子に入力した列の最大値、最小値、および平均を提供することを目的としています。

例: "./script.sh 7 8 9 -g TAGLN" このコードは、遺伝子 TAGLN の列 7 8 9 の最大、最小、および平均を示します。

ここでの問題は、関数 output2() の平均が間違った結果を与えることです...ただし、関数 output1() の平均は問題なく、理解できません...

#!/bin/bash

output1() {
    var1=$(cat affy.txt | cut -d"!" -f$i | sort -nr | head -1)
    echo "Maximum value of array ARRY$(($i-5|bc))X is $var1"
    var2=$(cat affy.txt | cut -d"!" -f$i | sort -nr | tail -1)
    echo "Minimum value of array ARRY$(($i-5|bc))X is $var2"
    var3=$(cat affy.txt | cut -d"!" -f$i | awk '{total += $1; count++ } END {print total/count}')
    echo -e "Average of array ARRY$(($i-5|bc))X is $var3 \n"
}

output2() {
    var1=$(grep $word affy.txt | cut -d"!" -f$i | sort -nr | head -1)
    echo "Maximum value of array ARRY$(($i-5|bc))X in gene $word is $var1"
    var2=$(grep $word affy.txt | cut -d"!" -f$i | sort -nr | tail -1)
    echo "Minimum value of array ARRY$(($i-5|bc))X in gene $word is $var2"
    var3=$(grep $word affy.txt | cut -d"!" -f$i | awk '{total += $1; count++ } END {print total/count}')
    echo -e "Average of array ARRY$(($i-5|bc))X in gene $word is $var3 \n"
}

function3() {
columns=""
for i in $@; do
    if [ $i = "-g" ]; then
        word=$2
        is_there_g="True"
        break
    else
        is_there_g="False"
        fi
        columns+="$i "
        shift
done
length="${#columns}"
echo $columns
}

deciding_the_output() {
function3 $@
if [ $# = 0 ]; then
    for i in `seq 5 20`; do
        output1 $i
    done
else
    if [ $is_there_g = "False" ]; then
    for i in $columns; do
        output1 $i
    done
    else
    if [ $length = 0 ]; then
        for i in `seq 5 20`; do
            output2 $i
        done
    else
        for i in $columns; do
            output2 $i
        done
    fi
    fi
fi
}

deciding_the_output $@
4

1 に答える 1

0

と入力./script.sh 8すると、すべての行を取得して列 8 の最大、最小、および平均を探します。結果は正しいです。

Maximum value of array ARRY3X is 9,22055
Minimum value of array ARRY3X is -8,72615
Average of array ARRY3X is 0.441644 

と入力./script.sh 8 -g TAGLNすると、遺伝子 TAGLN の列 8 の最大、最小、および平均を探しますが、与えられた平均は間違っています。

Maximum value of array ARRY3X in gene TAG is 1,91835
Minimum value of array ARRY3X in gene TAG is 1,68215
Average of array ARRY3X in gene TAG is 1 

それは常に1、0のような整数を与えます...

于 2013-10-17T19:47:54.540 に答える