Bash diff-如果文件包含大于x的数字,则

Bash diff-如果文件包含大于x的数字,则,bash,awk,Bash,Awk,不知道怎么做--我有一个文件,其中包含一行和一个数字 如果这个数字超过,比如说,3-我需要它给我发电子邮件 我一直在玩弄awk,但语法不正确 对不起,我太业余了 因此,我拥有的awk命令是: awk '$1>3' diff.txt 返回文件中的数字,只要大于3。我的猜测是,如果它打印输出,我会告诉它做些什么。如果数字是3或更少,它不会打印任何东西-我不需要它做任何事情 差不多 if awk '$1>3' diff.txt >/dev/null ; then echo Take

不知道怎么做--我有一个文件,其中包含一行和一个数字

如果这个数字超过,比如说,3-我需要它给我发电子邮件

我一直在玩弄awk,但语法不正确

对不起,我太业余了

因此,我拥有的awk命令是:

awk '$1>3' diff.txt
返回文件中的数字,只要大于3。我的猜测是,如果它打印输出,我会告诉它做些什么。如果数字是3或更少,它不会打印任何东西-我不需要它做任何事情

差不多

if awk '$1>3' diff.txt >/dev/null ; then
echo Take action!
else
echo All OK!
fi
我不知道如何将awk命令正确格式化到脚本中,它不起作用。但我怀疑我的思路是对的

无论如何,可能有更好的解决办法

谢谢!
史蒂夫。

你在这里不需要awk。只要读一读就足够了:

read -r num < diff.txt
if [[ "$num" -gt 3 ]]; then
   echo "Take action!"
else
   echo "All OK!"
fi
read-r num
有上千种不同的方法,但如果您想使用
awk
,那就是:

awk '
{
  if ($1 > 3) { 
      system("echo Take action") }
  else { 
      system("echo  All ok") 
  }
}' < diff.txt
awk'
{
如果($1>3){
系统(“回声采取行动”)}
否则{
系统(“回显全部正常”)
}
}“
system
是如何从
awk
启动外部程序的。
当然,如果您只想打印某些内容,只需编写
print
,而不是
system

您的if行检查命令的退出状态,而不是它是否创建了任何输出。您需要您的awk脚本以成功/失败退出状态退出,这取决于它找到的内容。这样做,你的if就会起作用。为此,您需要使用awk
exit
命令。外壳
是将awk 0=false/1=true反转为shell的0=true/1=false

if ! awk '{exit $1>3}' diff.txt; then
    echo "Take action!"
else
    echo "All OK!"
fi

我建议采用这种方法:

(( $(<file) > 3 )) && mailx -s "File contains $(<file)..." me@whereever.org < /dev/null

($(3))&&mailx-s“文件包含$(是的,我猜有一百万种方法可以做到这一点。我没有这样的经验。谢谢igor!