linux之shell awk 之一
awk抽取域 不輸出到螢幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$2,$7}' grade.txt >wow_3.txt
awk抽取域 輸出到螢幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$4}' grade.txt | tee delete_mde_and_die
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
列印所有記錄
oracle@ser168:~/qilin/demo> awk '{print $0}' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
列印報告頭
oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name belt\n-------------------"} {print $1"\t"$4}' grade.txt
name belt
-------------------
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
列印資訊尾
oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name\n-----"} {print $1} end {"end-of-report"}' grade.txt
name
-----
M.Tansley
J.Lulu
P.Bunny
J.Troll
L.Tansley
匹配 如果記錄包含模式b r o w n,就列印它:
oracle@ser168:~/qilin/demo> awk '$0 ~ /Brown/' grade.txt
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
精確匹配--假定要使字串精確匹配,比如說檢視學生序號 4 8,檔案中有許多學生序號包含 4 8,如果在f i e l d - 3中查詢序號4 8,a w k將返回所有序號帶4 8的記錄:
oracle@ser168:~/qilin/demo> awk '{if($3~/48/) print $0}' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
精確匹配--為精確匹配4 8,使用等號= =,並用單引號括起條件。例如 $ 3 = =“4 8” ,這樣確保只有4 8序號得以匹配,其餘則不行
oracle@ser168:~/qilin/demo> awk '$3=="48" {print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
不匹配--有時要瀏覽資訊並抽取不匹配操作的記錄,與 ~相反的符號是!~,意即不匹配。像原來使用查詢b r o w n腰帶級別的匹配操作一樣,現在看看不匹配情況。表示式 $0 !~/brown/,意即查詢不包含模式b r o w n腰帶級別的記錄並列印它
oracle@ser168:~/qilin/demo> awk '$0 !~/Brown/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
大於
oracle@ser168:~/qilin/demo> awk '{if ($6>$7) print $1}' grade.txt
P.Bunny
L.Tansley
小於等於
oracle@ser168:~/qilin/demo> awk '{if ($6 <=$7) print $1}' grade.txt
M.Tansley
J.Lulu
J.Troll
設定大小寫
oracle@ser168:~/qilin/demo> awk '/[Gg]reen/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
設定大小寫--為查詢大小寫資訊,可使用[ ]符號。在測試正規表示式時提到可匹配[ ]內任意字元或單詞,因此若查詢檔案中級別為g r e e n的所有記錄,不論其大小寫,表示式應為‘ / [ G g ] r e e n /: ’
oracle@ser168:~/qilin/demo> awk '$1~/^...a/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
L.Tansley 05/99 4712 Brown-2 12 30 28
或關係匹配--為抽取級別為y e l l o w或b r o w n的記錄,使用豎線符 |。意為匹配 | 兩邊模式之一。注意,使用豎線符時,語句必須用圓括號括起來。
oracle@ser168:~/qilin/demo> awk '$0~/(Yellow|Brown)/' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
11. AND--列印記錄,使其名字為‘ P. B u n n y且級別為 Ye l l o w,使用表示式 ( $ 1 = = " P. B u n n y " & &$ 4 = = " Ye l l o w " ),意為& &兩邊匹配均為真。完整命令如下:
oracle@ser168:~/qilin/demo> awk '{if ($1=="P.Bunny" && $4=="Yellow")print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
12. Or--如果查詢級別為Ye l l o w或B r o w n,使用或命令。意為“ | |”符號兩邊的匹配模式之一或全部為真。
oracle@ser168:~/qilin/demo> awk '{if ($4=="Yellow" || $4~/Brown/) print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
oracle@ser168:~/qilin/demo> awk '{print $1,$2,$7}' grade.txt >wow_3.txt
awk抽取域 輸出到螢幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$4}' grade.txt | tee delete_mde_and_die
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
列印所有記錄
oracle@ser168:~/qilin/demo> awk '{print $0}' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
列印報告頭
oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name belt\n-------------------"} {print $1"\t"$4}' grade.txt
name belt
-------------------
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
列印資訊尾
oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name\n-----"} {print $1} end {"end-of-report"}' grade.txt
name
-----
M.Tansley
J.Lulu
P.Bunny
J.Troll
L.Tansley
匹配 如果記錄包含模式b r o w n,就列印它:
oracle@ser168:~/qilin/demo> awk '$0 ~ /Brown/' grade.txt
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
精確匹配--假定要使字串精確匹配,比如說檢視學生序號 4 8,檔案中有許多學生序號包含 4 8,如果在f i e l d - 3中查詢序號4 8,a w k將返回所有序號帶4 8的記錄:
oracle@ser168:~/qilin/demo> awk '{if($3~/48/) print $0}' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
精確匹配--為精確匹配4 8,使用等號= =,並用單引號括起條件。例如 $ 3 = =“4 8” ,這樣確保只有4 8序號得以匹配,其餘則不行
oracle@ser168:~/qilin/demo> awk '$3=="48" {print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
不匹配--有時要瀏覽資訊並抽取不匹配操作的記錄,與 ~相反的符號是!~,意即不匹配。像原來使用查詢b r o w n腰帶級別的匹配操作一樣,現在看看不匹配情況。表示式 $0 !~/brown/,意即查詢不包含模式b r o w n腰帶級別的記錄並列印它
oracle@ser168:~/qilin/demo> awk '$0 !~/Brown/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
大於
oracle@ser168:~/qilin/demo> awk '{if ($6>$7) print $1}' grade.txt
P.Bunny
L.Tansley
小於等於
oracle@ser168:~/qilin/demo> awk '{if ($6 <=$7) print $1}' grade.txt
M.Tansley
J.Lulu
J.Troll
設定大小寫
oracle@ser168:~/qilin/demo> awk '/[Gg]reen/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
設定大小寫--為查詢大小寫資訊,可使用[ ]符號。在測試正規表示式時提到可匹配[ ]內任意字元或單詞,因此若查詢檔案中級別為g r e e n的所有記錄,不論其大小寫,表示式應為‘ / [ G g ] r e e n /: ’
oracle@ser168:~/qilin/demo> awk '$1~/^...a/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
L.Tansley 05/99 4712 Brown-2 12 30 28
或關係匹配--為抽取級別為y e l l o w或b r o w n的記錄,使用豎線符 |。意為匹配 | 兩邊模式之一。注意,使用豎線符時,語句必須用圓括號括起來。
oracle@ser168:~/qilin/demo> awk '$0~/(Yellow|Brown)/' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
11. AND--列印記錄,使其名字為‘ P. B u n n y且級別為 Ye l l o w,使用表示式 ( $ 1 = = " P. B u n n y " & &$ 4 = = " Ye l l o w " ),意為& &兩邊匹配均為真。完整命令如下:
oracle@ser168:~/qilin/demo> awk '{if ($1=="P.Bunny" && $4=="Yellow")print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
12. Or--如果查詢級別為Ye l l o w或B r o w n,使用或命令。意為“ | |”符號兩邊的匹配模式之一或全部為真。
oracle@ser168:~/qilin/demo> awk '{if ($4=="Yellow" || $4~/Brown/) print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-684538/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux之shell awk 之二Linux
- linux之shell命令之一Linux
- linux之 awkLinux
- linux之awkLinux
- awk小技巧之執行shell命令
- linux之awk用法Linux
- [Shell] awk初學之常見問題
- linux_shell awk中傳遞變數Linux變數
- Linux Shell指令碼系列之一Linux指令碼
- awk 系列:如何讓 awk 使用 Shell 變數變數
- [Shell] awk 陣列(2)陣列
- [Shell] awk 陣列(1)陣列
- awk引用shell變數變數
- awk使用shell變數變數
- shell 中 grep、sed、awk 命令
- Linux三大劍客之awkLinux
- Linux shell工具grep awk cut sort uniq sort 使用小結Linux
- linux之shell findLinux
- linux之shell 其他Linux
- 【shell筆記>命令】grep,sed,awk筆記
- Shell字元操作命令——grep、sed、awk字元
- [Shell] awk學習(1)-pattern{action}
- [Shell] awk學習(2)-pattern{action}
- Linux三劍客之awk詳解Linux
- linux_shell_awk 處理 文字檔案 並匯入excelLinuxExcel
- Linux awkLinux
- Linux Shell Awk 流程控制語句(if,for,while,do)詳細介紹LinuxWhile
- Linux Shell Awk獲得外部變數(變數傳值)簡介Linux變數
- 007 Linux 命令三劍客之-awkLinux
- Linux三劍客之awk入門指引Linux
- Linux系統命令三劍客之 awkLinux
- [Shell] AWK實現SQL的功能(1)SQL
- [Shell] awk 統計分組資料
- [Shell] awk 實現列轉行例子
- Linux之shell變數Linux變數
- Linux Shell之表示式Linux
- 一篇文章帶你學會Linux三劍客之一:awkLinux
- Linux-(awk)Linux