2014-01-20 65 views
1

不知道如何做到這一點 - 我有一個文件,其中包含一行,其中包含一個數字。diff - 如果文件包含大於x的數字,那麼

如果這個數字超過了,比如說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命令到腳本,這是不行的。但我懷疑我正走在正確的軌道上。

無論如何可能有一些更好的解決方案。

謝謝! Steve。

回答

0

有一千種不同的方式來做到這一點,但如果你有awk想要它,就是它了:

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

system在這裏,你是如何從awk啓動外部程序。 當然,如果你只想打印一些東西,你只需要寫print而不是system

+0

是的,我猜想有一百萬種方法可以做到這一點。我沒有經驗。謝謝igor! –

2

這裏不需要awk。剛看完就足夠了:

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

嘭上,太容易了,三江源! –

+0

不客氣,很高興有任何幫助。 – anubhava

+0

如果它適用於您,那麼您可以將答案標記爲已接受。 – anubhava

2

你的if行檢查命令的退出狀態,而不是它是否創建任何輸出。您需要使用awk腳本根據其找到的內容退出成功/失敗退出狀態。做到這一點,你會如果工作。要做到這一點,你想使用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 
0

我會推薦這個特殊的方法:

(($(<file) > 3)) && mailx -s "File contains $(<file)..." [email protected] < /dev/null 
相關問題