0

私のコードの目的は

  • 2つの別々のファイルから2つの値を読み取ること。[完璧に機能している]
  • それらを10進値に変換します。[正常に動作しています]
  • それらの違いを見つけてください。[正常に動作しています]
  • 負の値の場合、差を正にすること。[動作していません。状態をチェックしていません。]

これが私のコードです。Ubuntu11.04でコーディングされています。

...
while read line;
do
echo -e "$line";
AllOn=$line
done<Output.log

gcc -Wall -o0 Test.c -o output
time -f "%e" -o BaseFile.log ./output
while read line;
do
echo -e "$line";
AllOff=$line
done<BaseFile.log

#Threshold Value
Threshold=`echo "$AllOff - $AllOn" | bc`;
echo "Threshold is $Threshold"
if [ `echo "$Threshold < 0.00"|bc` ]; then
   Threshold=`echo "$Threshold * -1" | bc`;
fi
echo "\nThreshold is $Threshold" >> $Result

これで、値に関係なく、if clauseが実行されます。私のif条件がチェックされておらず、それが次の出力の理由になると思います。

基準時間は2.94です
すべてのテクニックオフ=3.09
しきい値は.15です


基本時間は3.07です
すべてのテクニックオフ=2.96
しきい値は-.11です

更新:この質問にはまだ完全には答えられていません。値の違いを見つけるという私の4番目の目的を達成する方法を誰かが私に提案できれば、それは私にとって本当に役に立ちます。ありがとうございました。

4

2 に答える 2

2

どのシェルを使用していますか?私は単なる古い「sh」または「bash」を想定しています。

もしそうなら、あなたが持っている33行目を見てください:

if($ Threshhold <0)then

これを次のように切り替えます。

if [$ Threshhold -lt 0]; それから

他の問題があるかもしれません、私はそれらをチェックするためにコードを綿密に調べていません。

さらに拡張するために、テストスクリプトとデータをノックアップしました(「しきい値」を「しきい値」に変更したことに注意してください)。

# Example test.sh file
!/bin/bash

while read line;
do
echo "$line";
AllOn=$line
done < Output.log

while read line;
do
echo "$line";
AllOff=$line
done < BaseFile.log

#Threshhold Value
Threshold=`echo "$AllOn - $AllOff" | bc`;
echo "Threshold is $Threshold"
if [ `echo "$Threshold < 0"|bc` ]; then
  # snips off the '-' sign which is what you were trying to do it looks
  Threshold=${Threshold:1}
fi
echo $Threshold
Result=result.txt
echo "\nThreshold is $Threshold" >> $Result

次に、いくつかのデータファイル、最初のOutput.log:

# Output.log
1.2

次にBaseFile.log:

# BaseFile.log
1.3

上記からの出力例:

./test.sh
1.2
1.3
Threshold is -.1
.1
于 2013-01-02T05:07:09.950 に答える
1

Bourneシェルには、算術演算機能が組み込まれていません。割り当て

Threshhold=$AllOn-$AllOff

2つの文字列をマイナス記号で連結するだけです。

Bashでは、次を使用できます

Threshhold=$(($AllOn-$AllOff))

しかし、それでもゼロとの比較はできません。移植性のために、私は単にタスク全体にAwkを使用します。

#!/bin/sh
gcc -Wall -o0 Test.c -o output
time -f "%e" -o BaseFile.log ./output
awk 'NR==FNR { allon=$0; next }
    { alloff=$0 }
    END { sum=allon-alloff; 
        if (sum < 0) sum *= -1; 
        print "Threshold is", sum }' Output.log BaseFile.log >>$Result
于 2013-01-02T05:27:21.923 に答える