Linux中國
awk 系列:如何使用 awk 的 『next』 命令
在 awk 系列的第六節,我們來看一下next
命令 ,它告訴 awk 跳過你所提供的所有剩下的模式和表達式,直接處理下一個輸入行。
next
命令幫助你阻止運行命令執行過程中多餘的步驟。
要明白它是如何工作的, 讓我們來分析一下 food_list.txt 它看起來像這樣:
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 的行後面標一個星號:
# awk '$4 <= 20 { printf "%st%sn", $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
上面的命令實際運行如下:
- 首先,它用
$4 <= 20
表達式檢查每個輸入行的第四列(數量(Quantity))是否小於或者等於 20,如果滿足條件,它將在末尾打一個星號(*)
。 - 接著,它用
$4 > 20
表達式檢查每個輸入行的第四列是否大於20,如果滿足條件,顯示出來。
但是這裡有一個問題, 當第一個表達式用{ printf "%st%sn", $0,"**" ; }
命令進行標註的時候在同樣的步驟第二個表達式也進行了判斷這樣就浪費了時間.
因此當我們已經用第一個表達式列印標誌行的時候就不再需要用第二個表達式$4 > 20
再次列印。
要處理這個問題, 我們需要用到next
命令:
# awk '$4 <= 20 { printf "%st%sn", $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 "%st%sn", $0,"*" ; next ; }
命令列印以後,next
命令將跳過第二個$4 > 20
{ print $0 ;}
表達式,繼續判斷下一個輸入行,而不是浪費時間繼續判斷一下是不是當前輸入行還大於 20。
next
命令在編寫高效的命令腳本時候是非常重要的,它可以提高腳本速度。本系列的下一部分我們將來學習如何使用 awk 來處理標準輸入(STDIN)。
希望這篇文章對你有幫助,你可以給我們留言。
via: http://www.tecmint.com/use-next-command-with-awk-in-linux/
作者:Aaron Kili 譯者:kokialoves 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive
對這篇文章感覺如何?
太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
More in:Linux中國
如何通過 VLC 使用字幕
使用 VLC 媒體播放器播放和管理字幕的新手指南。
Unix 桌面:在 Linux 問世之前
僅僅開源還不足以實現開放,還需開放標準和建立共識。
Valve 對於 Ubuntu 的 Snap 版本的 Steam 並不滿意:原因何在
你可能會發現,Snap 版本的 Steam 並不如你期待的那樣好,你怎麼看?
Wine 9.0 發布,實驗性地加入了 Wayland 驅動
Wine 的這個新版本正在為未來做好準備!