awk進行文字處理

2021-06-23 08:10:24 字數 4209 閱讀 5797

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...