比较文本文件中的数字,如果满足条件则运行shell脚本

比较文本文件中的数字,如果满足条件则运行shell脚本

我有一个文本文件(由脚本创建),其中仅包含单行中的数字,例如“5 17 42 2 87 33”。我想检查每个数字是否为 50(示例),如果其中任何一个数字大于 50,我想运行另一个 shell 脚本。我正在使用 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 -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

正则表达式中的第一个括号子句查找至少三位数字,或以“5”开头的两位数字。第二个子句允许选项小数点和任何后缀。

使用该-q选项来抑制正常输出,因为我们只想要退出状态。

相关内容