1 awk的內建變數
awk 所內建的字段變數及其涵意如下 :
字段變數
含義$0
一字串, 其內容為目前 awk 所讀入的資料行.
$1$0 上第乙個欄位的資料.
$2$0 上第二個欄位的資料.
...其餘類推
內建變數
含義nf (number of fields)
為一整數, 其值表$0上所存在的字段數目.
nr (number of records)
為一整數, 其值表awk已讀入的資料行數目.
filename
正在處理的資料檔案檔名.
[dss@localhost ~]$ awk 'nr==1,nr==10 ' firewallb-week2-origin.sql
1 1 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
2 2 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
3 3 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
4 4 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
5 5 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
6 6 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
7 7 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
8 8 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
9 9 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
10 10 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
[dss@localhost ~]$
例如 : awk 從檔案 firewallb-week2-origin.sql中讀入第一到第十行資料
$0 是一行的資料
nr是行號
$3是07:02:35
filename是firewallb-week2-origin.sql
例如 : awk 從檔案 firewallb-week2-origin.sql中讀入第一到第十行資料並輸出到aa.txt
[dss@localhost ~]$ awk 'nr==1,nr==10 ' firewallb-week2-origin.sql >aa.txt
[dss@localhost ~]$ cat aa.txt
1 1 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
2 2 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
3 3 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
4 4 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
5 5 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
6 6 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
7 7 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
8 8 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
9 9 07:02:35 10/apr/2013 07:02:35 1365577355 info built asa-6-302013
10 10 07:02:35 10/apr/2013 07:02:35 1365577355 info teardown asa-6-302014
[dss@localhost ~]$
2.工作流程 :
執行awk時, 它會反覆進行下列四步驟.
自動從指定的資料檔案中讀取乙個資料行.
自動更新(update)相關的內建變數之值. 如 : nf, nr, $0...
依次執行程式中 所有 的 pattern 指令.
當執行完程式中所有 pattern 時, 若資料檔案中還有未讀取的資料, 則反覆執行步驟1到步驟4.
awk會自動重複進行上述4個步驟, 使用者不須於程式中編寫這個迴圈 (loop).
3.使用
兩種方式:
a. $ awk -f awk程式檔名 資料檔案檔名
$ awk -f aa.awk aa.txt (-f 表示指定awk程式檔案)
b. $ awk '' aa.txt
[dss@localhost ~]$ awk '' aa.txt
1 1 built
2 4 teardown
3 9 teardown
4 16 built
5 25 teardown
6 36 teardown
7 49 built
8 64 built
9 81 built
10 100 teardown
[dss@localhost ~]$ awk '' aa.txt
1 乘法: 1 name: built
2 乘法: 4 name:teardown
3 乘法: 9 name:teardown
4 乘法: 16 name: built
5 乘法: 25 name:teardown
6 乘法: 36 name:teardown
7 乘法: 49 name: built
8 乘法: 64 name: built
9 乘法: 81 name: built
10 乘法:100 name:teardown
獲得檔案總行數
awk 'end' firewallb-week2-origin.sql
[dss@localhost ~]$ awk 'end' firewallb-week2-origin.sql
16600931
4.awk 引數
-v 指定程式中的變數 awk -v a=1 '' 可以使用a變數
-f 指定程式外部檔案 awk -f bb.awk data
-f 指定分隔符 awk -f \\t '' 指定分隔符為\t ,預設為空格
5:陣列的用法
有乙個檔案,第1欄是人員編號,其後幾行是會的語言
[jifeng@jifeng02 hadoop]$ cat course.txt
1 英語 中文 法文 日文
2 中文 法文
3 中文 法文 日文
4 中文 法文 拉丁
5 中文 法文 德文
要統計會各種語言的人數,執行如下:
建立如下程式,並取名為 course.awk:
[jifeng@jifeng02 hadoop]$ cat course.awk
end
執行:
[jifeng@jifeng02 hadoop]$ awk -f course.awk course.txt
法文 5
中文 5
德文 1
日文 2
拉丁 1
英語 1
使用awk進行文字處理
有過大文字處理經歷的朋友一定都知道awk,這是一種指令碼語言,對於處理一定格式的資料還是很方便使用的。下面介紹一下awk的常用方法。如果想系統學習,請看 1 awk的內建變數 awk 所內建的字段變數及其涵意如下 字段變數 含義 0 一字串,其內容為目前 awk 所讀入的資料行.1 0 上第乙個欄位...
awk筆記 使用awk進行文字處理
在linux下開發,因為經常需要分析專案的日誌檔案,以此來查詢軟體功能可能的異常點,經同事的介紹慢慢接觸了linux下的三大利器 grep,sed,awk,特通過以下例子來總結下自己的學習結果 從文字檔案內篩選出起始點座標和結束點座標,並將此結果資料構造sql語句,最後使用sql將資料插入到對應表中...
Python進行文字處理
對於乙個文字字串,可以使用python的string.split 方法將其切割。下面看看實際執行效果。mysent this book is the best book on python print mysent.split 輸出 this book is the best book on pyt...