使用awk進行文字處理

2021-09-08 15:56:55 字數 2244 閱讀 4263

有過大文字處理經歷的朋友一定都知道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...