間隔内の変数の条件の場合

間隔内の変数の条件の場合

いくつかのデータが時間間隔にわたって分散されており、時間間隔内でいくつかのデータを取得したいと思います。たとえば、1..9、11..19などの範囲にあるデータがありますが、1-2、11-12などの範囲にあるデータをインポートしたいと思います。

これは、この条件とデータをキャプチャできるタイミングを分離するループをbash含めるより複雑なスクリプトの一部になります。if

私は次のことを考えています:

if (( $t_initial & $t_final )) in (begin1, fin1) or in (begin2, fin2) ...

t_initialここで、合計はt_finalスクリプト自体によって別々に計算されます。

この条件を構文で作成することはできませんbash。他の解決策を見つけましたが、長すぎて不快に見えたので、ここでより簡単で読みやすい解決策を求めます。


コードが浮動小数点数で正しく機能することは非常に重要です。 OPソリューションを修正しようとしていますが、まだ方法が見つかりません。

ベストアンサー1

この解決策が気に入るかもしれません。これには2つの特性があります。

  • 外部プログラムは不要
  • 関数を使用するので、少なくとも比較の複雑さを隠します。

これです:

#!/bin/bash

# The comparing function
function compareInterval {
 t1=$1
 t2=$2

 shift 2

 while (( "$2" )); do
   if ((  $t1 >= $1  &&  $t2 <= $2 )); then
     # got match
     return 0
   fi
   shift 2
 done

 return 1
}

# sample values
t_initial=2
t_final=4

# Invocation. Compares against 1-3, 3-5, 2-5
if compareInterval  $t_initial $t_final  1 3  3 5  2 5; then
 echo Got match
fi

おすすめ記事