在shell中我有以下代碼。在awk中使用shell命令不起作用
它不起作用。因此,我不知道什麼是我的錯誤我想知道,如果有人可以幫助我
echo $i | awk -F "," '{if(NF == 1) print "Exiting..." system("exit")}'
所以$i
是例如hi,hello
的參數。如果字段數等於1,我希望程序退出。
在shell中我有以下代碼。在awk中使用shell命令不起作用
它不起作用。因此,我不知道什麼是我的錯誤我想知道,如果有人可以幫助我
echo $i | awk -F "," '{if(NF == 1) print "Exiting..." system("exit")}'
所以$i
是例如hi,hello
的參數。如果字段數等於1,我希望程序退出。
您不能通過系統調用exit,因爲awk是在單獨的進程中執行的。但是,可以使用指定的錯誤代碼從awk調用exit,然後根據錯誤代碼退出腳本。示例:
awk -F "," '{if(NF==1){ print "Exiting"; exit -1}}' || exit
謝謝。然而,當NF> 1它仍然退出..... ??? – Masster
@Matin它不應該退出'NF> 1'。也許你沒有用逗號分隔這些字段(',')?另外請注意,你忘了在你的問題 – user000001
代碼中的一組大括號括號:( 我有我的字符串是'--only:4,3,2,1'很多逗號,但它仍然退出 – Masster
awk無法強制其父進程退出,但是您可以重構代碼以便調用shell退出。
在這個有限的背景下,你根本不需要Awk。
case $i in
*,*) ;; # nothing
*) echo Exiting... >&2; exit 1;;
esac
您是否希望包含上述代碼的腳本退出?由於awk命令在不同的進程中運行,因此不能像這樣退出。但是,您可以使用特定的退出代碼從awk調用exit命令(無系統),然後從shell腳本中檢查awk的退出代碼。 – user000001
@ user000001如果NF等於1,我希望整個代碼退出。 – Masster
@ Matin爲此添加了一個示例 – user000001