不知道怎么做 - 我有一个文件,其中包含一行,其中包含一个数字。
如果这个数字超过了,比如说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命令格式化为脚本,这是行不通的。但我怀疑我走在正确的轨道上。
无论如何,可能还有一些更好的解决方案。
谢谢! 史蒂夫。
答案 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