awk是乙個強大的資料處理引擎,相對於grep的查詢,sed的編輯,awk對資料的分析和生成的報告更強大awk 其實就是乙個指令碼程式語言
請記住 awk 是針對檔案的每一行來執行一次單引號 裡面的指令碼**,每讀取到一行就會執行一次,檔案裡面有多少行就會執行多少次,但 begin 和 end 關鍵字後面的 指令碼**除外,如果被處理的檔案中什麼都沒有,那 awk 就一次都不會執行
awk [options] 'program'
file
實戰例子
$ awk '' /etc/passwd
可執行指令碼**使用單引號括起來
花括號裡面就是一些可執行的指令碼**段
當 awk 每讀取一行之後,它會依次執行雙引號裡面的每個指令碼**段
1、awk 預設的分割符為空格和製表符,可以使用 -f 引數來指定分隔符實戰例子
$ awk -f
':''' /etc/passwd
上面的命令將 /etc/passwd 檔案中的每一行用冒號 : 分割成多個字段,然後用 print 將第 1 列字段的內容列印輸出
2、在 -f 引數中使用一對方括號來指定多個分隔符
$ awk -f
'[()]'
'' some.
log
awk 處理 some.log檔案時就會使用 「(」 和 「)」 來對檔案的每一行進行分割
$0這個表示文字處理時的當前行$1表示文字行被分隔後的第 1 個字段列$2表示文字行被分割後的第 2 個字段列$3表示文字行被分割後的第 3 個字段列$n表示文字行被分割後的第 n 個字段列nr表示檔案中的行號,表示當前是第幾行nf表示檔案中的當前行中列的個數,類似於 mysql 資料表裡面每一條記錄有多少個字段。
fs表示 awk 的輸入分隔符,預設分隔符為空格和製表符,可以對其進行自定義設定
ofs表示 awk 的輸出分隔符,預設為空格,可以對其進行自定義設定
filename表示當前檔案的檔名稱,如果同時處理多個檔案,它也表示當前檔名稱
實戰例子
1 - 列印輸出檔案的每一整行的內容
$ awk '' fruit.txt
2 - 列印輸出檔案的每一行的第 1 列內容
$ awk '' fruit.txt
3 - 列印輸出檔案的每一行的第 1 列、第 2 列和第 3 列內容(其中加入的逗號表示插入輸出分隔符,也就是預設的空格
$ awk '
' fruit.txt
4 - 檔案的每一行的每一列的內容除了可以用 print 命令列印輸出以外,還可以對其進行賦值(表示通過對 $2 變數進行重新賦值,來隱藏每一行的第 2 列內容)
$ awk '' fruit.txt
5 - 在引數列表中加入一些字串或者轉義字元(使用雙引號)
$ awk ''
fruit.txt
6- awk 內建 nr 變數表示每一行的行號
$ awk '' fruit.txt
7 - awk 內建 nf 變數表示每一行的列數
$ awk '' fruit.txt
8 - awk 中 $nf 變數的使用
$ awk '' fruit.txt //最後一列
$ awk '' fruit.txt //倒數第二列
上面這個$nf
就表示每一行的最後一列,因為 nf 表示一行的總列數,然後在其前面加上 $ 符號,表示最後那一列
9 - 同時處理多個檔案
$ awk '' fruit.txt company.txt
當使用 awk 同時處理多個檔案的時候,它會將多個檔案合併處理,變數 filename 就表示當前文字行所在的檔名稱。
在指令碼**段前面使用 begin 關鍵字時,它會在開始讀取乙個檔案之前,執行一次 begin 關鍵字後面的指令碼**段,begin 後面的指令碼**段只會執行一次,執行完之後 awk 程式就會退出
$ awk 'begin ' /etc/passwd
awk 指令碼中可以用多個花括號來執行多個指令碼**
$ awk 'begin ' /etc/passwd
awk 的 end 指令和 begin 恰好相反,在 awk 讀取並且處理完檔案的所有內容行之後,才會執行 end 後面的指令碼**段
$ awk 'end ' /etc/passwd
$ awk 'begin end ' /etc/passwd
在 awk 指令碼中宣告和使用變數
$ awk '' /etc/passwd
awk 宣告的變數可以在任何多個花括號指令碼中使用
$ awk 'begin ' /etc/passwd
$ awk '' company.txt
先宣告兩個變數 a = 12 和 b = 24,然後用 print 列印出 a 加上 b 的結果
符號名稱
+加法運算子
-減法運算子
*乘法運算子
/除法運算子
%取餘運算子
判斷檔案的第 3 列資料,然後將其列印輸出
$ awk '$3 < 5500 ' company.txt //兩條指令效果相同
$ awk '' company.txt ////兩條指令效果相同
$3 < 5500
表示當第 3 列字段的內容小於 5500 的時候才會執行後面的
**塊
$ awk '$1 == "yahoo" ' company.txt
符號
名稱<
小於<=
小於或等於
==等於
!=不等於
>
大於>=
大於或等於
~匹配正規表示式
!~不匹配正規表示式
對正規表示式不熟悉,就先不寫了
Ubuntu apt 使用指南
起初gnu linux系統中只有.tar.gz。使用者必須自己編譯他們想使用的每乙個程式。在debian出現之後,人們認為有必要在系統中新增 一種機制用來管理安裝在計算機上的軟體包。人們將這套系統稱為dpkg。至此著名的 package 首次在gnu linux上出現。不久之後紅帽子也 開始著手建立...
CImageList使用指南
1.綜述 在mfc 中cimagelist 類封裝了 影象列表控制項的功能,影象列表是乙個具有相同大小的 影象 可以是不同 型別 的集合,其主要用於 應用程式中大規模 圖示的儲存。該控制項是不可 見的,通常與其它如 clistbox ccombobox ccomboboxex ctabctrl 以及...
CImageList使用指南
cimagelist使用指南 1.綜述 在 mfc中cimagelist類封裝了影象列表控制項的功能,影象列表是乙個具有相同大小的影象 可以是不同型別 的集合,其主要用於應用程式中大 規模圖示的儲存,該控制項是不可見的。通常與其它如clistbox,ccombobox,ccomboboxex以及ct...