有過大文字處理經歷的朋友一定都知道awk,這是一種指令碼語言,對於處理一定格式的資料還是很方便使用的。下面介紹一下awk的常用方法。
如果想系統學習,請看
1 awk的內建變數
awk 所內建的字段變數及其涵意如下 :
字段變數
含義$0
一字串, 其內容為目前 awk 所讀入的資料行.
$1$0 上第乙個欄位的資料.
$2$0 上第二個欄位的資料.
其餘類推
內建變數
含義nf (number of fields)
為一整數, 其值表$0上所存在的字段數目.
nr (number of records)
為一整數, 其值表awk已讀入的資料行數目.
filenameawk
正在處理的資料檔案檔名.
例如 : awk 從資料檔案 emp.dat 中讀入第一筆資料行
"a125 jenny 100 210" 之後, 程式中:
$0 之值將是 "a125 jenny 100 210"
$1 之值為 "a125"
$2 之值為 "jenny"
$3 之值為 100
$4 之值為 210
$nf 之值為 4
$nr 之值為 1
$filename 之值為 "emp.dat"
2 awk工作流程
awk的工作流程 :
執行awk時, 它會反覆進行下列四步驟.
自動從指定的資料檔案中讀取乙個資料行.
自動更新(update)相關的內建變數之值. 如 : nf, nr, $0...
依次執行程式中 所有 的 pattern 指令.
當執行完程式中所有 pattern 時, 若資料檔案中還有未讀取的資料, 則反覆執行步驟1到步驟4.
awk會自動重複進行上述4個步驟, 使用者不須於程式中編寫這個迴圈 (loop).
3 使用舉例
兩種方式:a. $ awk -f awk程式檔名 資料檔案檔名 $ awk -f pay1.awk emp.dat (-f 表示指定awk程式檔案)
b. $ awk '' emp.dat
比如存在檔案emp.dat,資料如下:
a125 jenny 100 210
a341 dan 110 215
p158 max 130 209
p148 john 125 220
a123 linda 95 210
執行 $ awk '' emp.dat
輸出:jenny 21000
dan 23650
max 27170
john 27500
linda 19950
執行 $ awk '' emp.dat
輸出:jenny work hours: 100 pay: 21000
dan work hours: 110 pay: 23650
max work hours: 130 pay: 27170
john work hours: 125 pay: 27500
linda work hours: 95 pay: 19950
3 awk 引數
-v 指定程式中的變數 awk -v a=1 '' 可以使用a變數
-f 指定程式外部檔案 awk -f pro.awk data
-f 指定分隔符 awk -f \\t '' 指定分隔符為\t ,預設為空格
4 awk高階用法——陣列
首先建立乙個資料檔案, 並取名為reg.dat. 此為一學生註冊的資料檔案; 第一欄為學生姓名, 其後為該生所修課程.
mary o.s. arch. discrete
steve d.s. algorithm arch.
wang discrete graphics o.s.
lisa graphics a.i.
lily discrete algorithm
要統計各科修課人數,執行如下:
建立如下程式,並取名為 course.awk:
end執行下列命令 :
$awk -f course.awk reg.dat
執行結果如下 :
graphics 2
o.s. 2
discrete 3
a.i. 1
d.s. 1
arch. 2
algorithm 2
awk進行文字處理
1 awk的內建變數 awk 所內建的字段變數及其涵意如下 字段變數 含義 0 一字串,其內容為目前 awk 所讀入的資料行.1 0 上第乙個欄位的資料.2 0 上第二個欄位的資料.其餘類推 內建變數 含義nf number of fields 為一整數,其值表 0上所存在的字段數目.nr numb...
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...