テキストファイルの数字を比較し、条件が満たされたらシェルスクリプトを実行します。

テキストファイルの数字を比較し、条件が満たされたらシェルスクリプトを実行します。

「5 17 42 2 87 33」など、1行に数字のみを含むテキストファイル(スクリプトで生成)があります。各数字が50(はい)であることを確認し、数字の1つが50より大きい場合は、別のシェルスクリプトを実行したいと思います。私はvumometerプログラムを使用していますが、騒音レベルが高いときに音認識プログラムを実行することが目的です。だから私はしきい値を決定したいと思います。

答え1

input関数とハードコードされたファイル名を引数として受け入れます。

greaterthan() (
  threshold=$1
  set -- $(< input)
  for arg
  do
    if [ "$arg" -gt "$threshold" ]
    then
      echo execute other shell script
      break
    fi
  done
)

ソースコードを作成するか、スクリプトで作成し、必要に応じて名前を付けるか、greaterthan 50必要な数字で指定します。

答え2

DCを使用できます。

dc -f lefile -e '
  [ c                                         # clear the stack
  ! xmessage "a number is greater than 50" &  # pop up a message
  ] sr
  [ 50 <r                                     # if a number > 50 execute macro r
  z 0 <t                                      # if stack not empty execute macro t
  ] st
  lt x
'

答え3

使用awk:

awk '{ for(i = 1; i <= NF; i++) if($i > 50) { system("bash /other/shell/script.sh") } }' file.txt

Bashスクリプトを使用してください。

#!/bin/bash

file=/path/to/file.txt

for num in $(<"$file"); do
    if ((num>50)); then
        bash /other/shell/script.sh
    fi
done

その後、各数字を繰り返してfile.txt数字が50より大きいことを確認し、指定したスクリプトを実行します。ただし、これは問題になるか不要になる可能性があります。テキストファイルに50を超える数字が複数ある場合は、スクリプトを複数回実行する必要がありますか?

答え4

ファイルを複数行に分割し、50以上の数字に一致する行を検索できます。

fmt -w1 | egrep -q '(\d\d\d|[5-9]\d)(\..*)?' && sh other_script.sh

正規表現の最初の角括弧句は、少なくとも3桁または「5」で始まる2桁を探します。 2番目のセクションでは、オプションの小数点と接尾辞を受け入れます。

-qシャットダウン状態のみが必要なため、通常の出力を抑制するにはこのオプションを使用します。

関連情報