我有一个文本文件(由脚本创建),其中仅包含单行中的数字,例如“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
选项来抑制正常输出,因为我们只想要退出状态。