2013-10-21 27 views
1

在shell中我有以下代碼。在awk中使用shell命令不起作用

它不起作用。因此,我不知道什麼是我的錯誤我想知道,如果有人可以幫助我

echo $i | awk -F "," '{if(NF == 1) print "Exiting..." system("exit")}' 

所以$i是例如hi,hello的參數。如果字段數等於1,我希望程序退出。

+0

您是否希望包含上述代碼的腳本退出?由於awk命令在不同的進程中運行,因此不能像這樣退出。但是,您可以使用特定的退出代碼從awk調用exit命令(無系統),然後從shell腳本中檢查awk的退出代碼。 – user000001

+0

@ user000001如果NF等於1,我希望整個代碼退出。 – Masster

+0

@ Matin爲此添加了一個示例 – user000001

回答

2

您不能通過系統調用exit,因爲awk是在單獨的進程中執行的。但是,可以使用指定的錯誤代碼從awk調用exit,然後根據錯誤代碼退出腳本。示例:

awk -F "," '{if(NF==1){ print "Exiting"; exit -1}}' || exit 
+0

謝謝。然而,當NF> 1它仍然退出..... ??? – Masster

+0

@Matin它不應該退出'NF> 1'。也許你沒有用逗號分隔這些字段(',')?另外請注意,你忘了在你的問題 – user000001

+0

代碼中的一組大括號括號:( 我有我的字符串是'--only:4,3,2,1'很多逗號,但它仍然退出 – Masster

3

awk無法強制其父進程退出,但是您可以重構代碼以便調用shell退出。

在這個有限的背景下,你根本不需要Awk。

case $i in 
    *,*) ;; # nothing 
    *) echo Exiting... >&2; exit 1;; 
esac