種々の問題が表示されている:コード内
- 外側のループは問題があります。
consolidated.txt
の時間範囲のいずれも一致しない場合、${Result}
はFalse
のままであり、外側のループは決して終了しません。
- データの最後の時間範囲である
6.30 0.30
は、範囲の終わりが範囲の開始よりも数値的に小さいため、決して一致することはありません。
- 条件で
time >= start && time <= end
を使用している場合、時間値が5.30
の場合は、4.30 5.30
の範囲(終了時刻と同じ)と5.30 6.30
の範囲(開始時刻と同じ)の両方に一致します。
Bashとは異なり、Kornシェルは浮動小数点演算をサポートしているので便利です。代わりに[[ … ]]
の
と文字列の比較(-ge
、-le
)を使用して、あなたは((…))
と(浮動小数点)数値比較(>=
、<
)を使用する必要があります。
単一のスクリプトにこれらの変更を組み立て、そしてそれはここでは関係ないのでResult
変数を無視して、あなたが得る:
#!/bin/ksh
for Time in 0 3 05 5.30 7.00
do
while read -r f1 f2 f3 f4 f5 f6 f7 f8 f9
do
if (("${Time}" >= "${f1}" && "${Time}" < "${f2}"))
then echo "${Time} is between ${f1} and ${f2} True"
else echo "${Time} is between ${f1} and ${f2} False"
fi
done << EOF
0.30 2.30 - - - - - - -
2.30 3.30 - - NA NA - - -
3.30 4.30 - - NA NA - - -
4.30 5.30 - - - - - - -
5.30 6.30 - - NA NA - - -
6.30 24.00 - - - - - - -
EOF
done
はい、ここでは文書の最後にEOF
をする必要がありません左マージンに。インデントが空白ではなくタブである限り、<<-'EOF'
を使用し、末尾マーカーEOF
をインデントすることができます。
このスクリプトの出力は次のようになります。
…
5.30 is between 3.30 and 4.30 False
5.30 is between 4.30 and 5.30 True
5.30 is between 5.30 and 6.30 True
5.30 is between 6.30 and 24.00 False
…
付:
0 is between 0.30 and 2.30 False
0 is between 2.30 and 3.30 False
0 is between 3.30 and 4.30 False
0 is between 4.30 and 5.30 False
0 is between 5.30 and 6.30 False
0 is between 6.30 and 24.00 False
3 is between 0.30 and 2.30 False
3 is between 2.30 and 3.30 True
3 is between 3.30 and 4.30 False
3 is between 4.30 and 5.30 False
3 is between 5.30 and 6.30 False
3 is between 6.30 and 24.00 False
05 is between 0.30 and 2.30 False
05 is between 2.30 and 3.30 False
05 is between 3.30 and 4.30 False
05 is between 4.30 and 5.30 True
05 is between 5.30 and 6.30 False
05 is between 6.30 and 24.00 False
5.30 is between 0.30 and 2.30 False
5.30 is between 2.30 and 3.30 False
5.30 is between 3.30 and 4.30 False
5.30 is between 4.30 and 5.30 False
5.30 is between 5.30 and 6.30 True
5.30 is between 6.30 and 24.00 False
7.00 is between 0.30 and 2.30 False
7.00 is between 2.30 and 3.30 False
7.00 is between 3.30 and 4.30 False
7.00 is between 4.30 and 5.30 False
7.00 is between 5.30 and 6.30 False
7.00 is between 6.30 and 24.00 True
は、あなたが質問が使用するものと同じです<=
から<
条件、変更する場合は、出力を得ます最後の範囲は6.30 0.30
となり、出力の最終部分は次のようになります。
…
7.00 is between 5.30 and 6.30 False
7.00 is between 6.30 and 0.30 False
これはどの言語ですか? – Laurel
これはkshのスクリプト – user3055262
私たちはそのためのタグを持っています。最初に質問を投稿するときは、これらの重要なすべての詳細を含める必要があります。 – Laurel