從AWK

2012-07-14 22 views
2

退出主shell腳本I'have bash腳本調用一個jar文件是這樣的:從AWK

awk -f fileformat.awk list.txt | while read arg1 arg2 arg3 arg4 arg5; do  
    java -jar /bin/2dbf.jar arg1 arg2 arg3 arg4 arg5 

    if [[ ${?} -eq 0 ]]; then 
     echo "2dbf.jar finished at: `date "+%F %T"`" 
     echo "---------------------------------------------" 
    else 
     echo "exiting..." 
     exit 10 
    fi 
done 

fileformat.awk是這樣的:如果符合#開始也沒有5場退出程序。

{ 
    if (NF == 5 && $1 !~ /#.*/) { 
     print $0 
    } else { 
     print "incorrect file format" 
     "exit 1" 
    } 
} 

我想那是什麼exit 1awk腳本終止整個shell腳本。但實際上它並沒有和jar文件拋出異常,因爲錯誤的選項。

回答

6

由於您的exit在AWK程序中引用,它產生了一個子shell並從退出。並且因爲您要將錯誤消息打印到stdout,所以提供了while循環。改變你的AWK腳本到這個,它應該工作:

{ 
    if (NF == 5 && $1 !~ /#.*/) { 
     print $0 
    } else { 
     print "incorrect file format" > "/dev/stderr" 
     exit 1 
    } 
} 
+0

謝謝你,它解決了我的問題。但在awk腳本退出腳本​​後,'echo $ {?}'顯示0而不是1. – 2012-07-14 06:12:48

+2

@MajidAzimi:這是因爲它在一個管道中。試試'echo「$ {PIPESTATUS [@]}」'。該數組中的元素0是管道第一個成員的退出狀態。 – 2012-07-14 06:17:47