2014-10-16 71 views
-1

以下是從bash腳本中調用awk腳本Analyze_Stat.awk的正確方法嗎? awk腳本在命令提示符下執行時可以正常工作。我試圖在awk腳本中將參數$ 4,$ 5,$ 6作爲值傳遞給變量Threshold,其語法是否正確?謝謝。從bash腳本調用awk腳本時出錯

#!/bin/bash 

#arguments passed 
if [ "$#" -ne 6 ] 
then 
    echo "Enter all arguments: Stat_Type Host Date(yyyymmdd) R1 R2 R3" 
    exit 
fi 

Stat_File="/path/to/stat/"$1"."$2"."$3"*.stat" 

k=4 
for i in {'Stat1','Stat2','Stat3'} 
do 
    `grep -i $i $Stat_File > "Temp/"$i".out"` 
    `awk -v Threshold="$"$k -f Analyze_Stat.awk "Temp/"$i".out"` 
    k=$((k+1)) 
done 
+1

在http看看/www.shellcheck.net/。 – 2014-10-16 14:39:17

+0

爲什麼你有''''圍繞'grep'和'awk'命令? – anubhava 2014-10-16 14:47:28

+0

@Kugelman:感謝您的參考,非常有用 – 2014-10-16 15:03:28

回答

1

我不確定在命令替換(反引用)中執行grep和awk會導致什麼樣的行爲。如果你恰好有三個迭代,硬編碼這三個步驟是:-)

grep -i 'Stat1' $Stat_File | awk -v Threshold="$4" -f Analyze_Stat.awk 
grep -i 'Stat2' $Stat_File | awk -v Threshold="$5" -f Analyze_Stat.awk 
grep -i 'Stat3' $Stat_File | awk -v Threshold="$6" -f Analyze_Stat.awk 

最簡單的解決方案,如果你喜歡一個循環,我建議如下:/:

shift 3; i=1 
for arg in "[email protected]"; do 
    grep -i "Stat$i" $Stat_File | awk -v Threshold="$arg" -f Analyze_Stat.awk 
    let i++ 
done