diff - 如果文件包含大于x的数字,那么

时间:2014-01-20 15:45:45

标签: bash awk

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

如果这个数字超过了,比如说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命令格式化为脚本,这是行不通的。但我怀疑我走在正确的轨道上。

无论如何,可能还有一些更好的解决方案。

谢谢! 史蒂夫。

4 个答案:

答案 0 :(得分:2)

你这里不需要awk。只需阅读即可:

read -r num < diff.txt
if [[ "$num" -gt 3 ]]; then
   echo "Take action!"
else
   echo "All OK!"
fi

答案 1 :(得分:2)

您的if行正在检查命令的退出状态,而不是它是否创建了任何输出。您需要awk脚本以成功/失败退出状态退出,具体取决于它找到的内容。这样做,你的if会起作用。为此,您需要使用awk exit命令。 shell !是将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

答案 2 :(得分:0)

有数千种不同的方法可以做到这一点,但如果你想用awk,那就是:

awk '
{
  if ($1 > 3) { 
      system("echo Take action") }
  else { 
      system("echo  All ok") 
  }
}' < diff.txt

system就是如何从awk启动外部程序的。 当然,如果你只想打印一些东西,你只需要写print,而不是system

答案 3 :(得分:0)

我会推荐这种特殊的方法:

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