AWK程式設計 一

2021-07-31 14:46:40 字數 1505 閱讀 3686

1. awk程式設計模型

awk程式是由乙個主輸入迴圈(main input loop)維持,主輸入迴圈反覆執行,直到終止條件被觸發。awk已經搭建好了主輸入迴圈框架,我們寫的**被嵌到主輸入迴圈框架中執行。主輸入迴圈依次自動讀取輸入檔案行,以供處理,而處理的檔案執行的動作是由我們自己新增的。

awk 還定義了兩個特使的字段:begin和end,begin主要用於在主輸入迴圈之前執行,即在未讀取輸入檔案行之前執行,end則相反,用於在主輸入迴圈之後執行,即在讀取輸入檔案完畢之後執行。

2. awk呼叫方法

有如下的三種呼叫awk的方法:

(1). 在shell命令列中輸入命令執行: awk [-f 域分隔符]  `awk程式段` 輸入檔案

(2). awk插入到指令碼中,然後呼叫指令碼進行執行

awk -f awk指令碼檔案 輸入檔案

(3). 將awk插入到指令碼檔案中,直接執行

./awk指令碼檔案   輸入檔案

3.  常用的awk程式設計

1. awk模式匹配

任何awk語句都是由模式(pattern)和動作(action)組成。模式是一組用於測試輸入行是否需要執行動作的規則,動作是包含語句、函式和表示式的執行過程。

注意其中的命令部分是單引號; 以/分隔符號;^$ 是正規表示式,表示空白行。print表示該動作是列印操作。

以上的命令表示  讀取輸入檔案input.txt 若裡面的一行是空白行,則列印 this is a blank line.

2. awk中的記錄和域

awk 認為輸入檔案是結構化的,awk將每個輸入檔案行定義為記錄,行中的每個字串定義為域,域之間用空格、tab鍵或其它分隔符號進行分隔,分隔域的符號叫分隔符。例如:

zhang  san 021-8888666

awk定義域操作符$ 來指定執行動作的域,域操作符$後面跟數字或變數來標識域的位置,每條記錄的域從1開始編號,例如: $1 表示第1個域、$2表示第2個域,$0表示所有的域。例如:

studentrecord.txt 中存放 三個學生的姓名以及**號碼,姓和名字之間只有乙個空格;名和**之間是乙個tab鍵。 只列印第乙個域。若列印全部可以$0

kenvindemacbook-air:$ awk '' studentrecord.txt 

zhang san 66661111

li si 8888222

wang wu 9999655

域操作符$之後也可以跟變數,或者變數的表示式。例如:

其中begin欄位中的語句是在遍歷輸入檔案之前執行的。 列印第3個域的值。

也可以使用-f選項改變分隔符例如: -f 引數則表示呼叫的awk指令碼。

上面預設分隔符是空格時**的域是第3個,若使用-f的分隔符則**的域則變成了第2個域。

也可以通過更改awk的環境變數fs來改變分隔符,例如:

也可以使用正規表示式將分隔符設定為多個字元,例如:fs="\t"  乙個空格  ; fs="\t+" 則表示乙個或者多個tab鍵作為分隔符。

以上是簡單總計幾個常用的用法,後續的用法明天再續。

awk程式設計

一 awk程式設計模型 awk程式由乙個主輸入迴圈維持,按行輸入,反覆執行,知道終止條件被觸發。awk定義了兩個特殊字段 begin 和 end,begin用於在主輸入迴圈 讀輸入檔案 之前執行,end用於在主輸入之後執行。二 awk幾種簡單的用法 注 input是乙個ascii檔案,其中包含三個空...

awk 程式設計

形式 awk options code filename 比如 awk f a filename 這裡用字元 a作為行分隔符,預設是空格 awk fmyscript awk filename in 如果 code 部分太長,或者要重用,可以寫成 awk指令碼 裡可以分成3部分。begin 條件 en...

awk程式設計

awk是linux 系統下的乙個強大的文字處理工具,常常和sed grep一起配合使用。主要功能就是將文字依行讀取,然後每行按照一定的分隔符隔開放進乙個array裡面並提供了函式對這些元素進行一定的處理分析。在awk中,檔案的每一行由域分隔符分開,每一項稱為乙個域。在不指明 f域分隔符的情況下,預設...