在 awk 系列的第六節,咱們來看一下next
命令 ,它告訴 awk 跳過你所提供的全部剩下的模式和表達式,直接處理下一個輸入行。linux
next
命令幫助你阻止運行命令執行過程當中多餘的步驟。git
要明白它是如何工做的, 讓咱們來分析一下 food_list.txt 它看起來像這樣:github
Food List Items No Item_Name Price Quantity 1 Mangoes $3.45 5 2 Apples $2.45 25 3 Pineapples $4.45 55 4 Tomatoes $3.45 25 5 Onions $1.45 15 6 Bananas $3.45 30
運行下面的命令,它將在每一個食物數量小於或者等於 20 的行後面標一個星號:app
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt No Item_Name Price Quantity 1 Mangoes $3.45 5 * 2 Apples $2.45 25 3 Pineapples $4.45 55 4 Tomatoes $3.45 25 5 Onions $1.45 15 * 6 Bananas $3.45 30
上面的命令實際運行以下:ide
$4 <= 20
表達式檢查每一個輸入行的第四列(數量(Quantity))是否小於或者等於 20,若是知足條件,它將在末尾打一個星號 (*)
。$4 > 20
表達式檢查每一個輸入行的第四列是否大於20,若是知足條件,顯示出來。可是這裏有一個問題, 當第一個表達式用{ printf "%s\t%s\n", $0,"**" ; }
命令進行標註的時候在一樣的步驟第二個表達式也進行了判斷這樣就浪費了時間.學習
所以當咱們已經用第一個表達式打印標誌行的時候就再也不須要用第二個表達式$4 > 20
再次打印。code
要處理這個問題, 咱們須要用到next
命令:get
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt No Item_Name Price Quantity 1 Mangoes $3.45 5 * 2 Apples $2.45 25 3 Pineapples $4.45 55 4 Tomatoes $3.45 25 5 Onions $1.45 15 * 6 Bananas $3.45 30
當輸入行用$4 <= 20
{ printf "%s\t%s\n", $0,"*" ; next ; }
命令打印之後,next
命令將跳過第二個$4 > 20
{ print $0 ;}
表達式,繼續判斷下一個輸入行,而不是浪費時間繼續判斷一下是否是當前輸入行還大於 20。it
next
命令在編寫高效的命令腳本時候是很是重要的,它能夠提升腳本速度。本系列的下一部分咱們未來學習如何使用 awk 來處理標準輸入(STDIN)。io
但願這篇文章對你有幫助,你能夠給咱們留言。
via: http://www.tecmint.com/use-next-command-with-awk-in-linux/
做者:Aaron Kili
譯者:kokialoves
校對:wxy