AWK使用筆記

2021-09-29 12:09:20 字數 3065 閱讀 8941

awk程式執行的方法

1、awk 『program』 input-file1 input-file2 … #這種方式適用於短的程式

2、awk -f program-file input-file1 input-file2 …

其中』program』由一系列的模式和行為組成

在awk的語法中,模式或行為都可以被省略,但是不能兩個都被省略。如果模式被省略了,行為將會針對每一行。如果行為被省略了將會執行預設行為(即列印所有匹配到模式的行)。

簡單的例子:

轉義字元的使用:

\ 字元「\」

\a 警告字元(ctrl+g,ascii碼為7(bel))

\b 退格,ctrl+h,bs

\f formfeed, ctrl+l, ff

\n 新行,ctrl+j, lf

正規表示式的符號

符號用途

轉義字元,用於匹配特殊字元

^用於匹配字串的開頭部分,並不匹配字串中間的\n

if (「line1\nline2」 ~ /^l/) … 條件的結果為false

$與^類似,只不過是用來匹配一行的結尾

.匹配任意單個字元,包括\n

[…]字元列表,匹配內的任意字元

[^…]

完全字元列表,匹配方括號裡面字元的所有字元,其中[與^之間沒有任何字元

|選擇符號,在正規表示式中是最低優先順序

(…)用於給正規表示式分組,

@(samp|code)]+}匹配@code 和 @samp

*符號前面的表示式可以重複任意次

+與類似,不過只匹配前面的表示式至少出現一次的情況

?與類似,只不過只匹配最多一次出現的情況

, ,

匹配前面的正規表示式重複n次的情況

出現n次

出現至少n次

出現n到m次

[:alnum:] 字母數字字元

[:alpha:] 字母字元

[:blank:] 空格和tab字元

[:cntrl:] 控制字元

[:digit:] 數字字元

[:graph:] 可列印和可視字元,空格是可列印字元但是是不可見的

[:lower:] 小寫字元

[:print:] 可列印字元

[:punct:] 標點符號

[:space:] 空白符號

[:upper:] 大寫字元

[:xdigit:]1 6進製字元

在posix awk和gawk中,如果*,+,?前面沒有任何字元,那麼他們就代表它們自己。

gawk中特有的正規表示式操作

匹配空字串出現在兩個單詞組成的字元之間的情況。與\y相反

不區分大小寫的匹配

1、使用正規表示式 [ww]實現

2、使用tolower($1) ~ /foo/ ,或者使用toupper()

3、設定內建變數ignorecase (0:區分大小寫 ,否則不區分大小寫)

匹配多少次

以echo aaaabcd | awk '』為例

awk正規表示式總是匹配輸入字串最左邊的、最長的符合匹配條件的字串

動態正規表示式

~ 或者 !~ 操作的右邊不能是正規表示式變數

使用正規表示式變數進行匹配的方式成為動態正規表示式。例子:begin $0 ~ digits_regexp

/*/表示字元「」的正規表示式,但是如果寫成字串形式要寫成「\」

awk的函式

內建函式

主要分為三類:數字函式、字串處理和io函式

gawk提供了額外的關於時間、位操作等程式。

內建函式呼叫的方式:atan2(y+z, 1) 其中函式名與圓括號之間的空白會被忽略,但是一般情況下書寫應該不帶空白。

當函式被呼叫的時候,入參列表的額表示式都是已經被計算之後的返回結果。如:i=4; j = sqrt(i++) 其中sqrt的入參為5。入參列表表示式被執行的順序是未被定義的。

數值函式

int(x) 返回最靠近x的整數,向0取整

sqrt(x) 返回x的正平方根。如果x為負數,gawk將會報告錯誤

exp(x) 返回e^x,如果x超出範圍將會報告錯誤。x的範圍取決於機器的浮點表示

log(x) 返回x的自然對數

sin(x) 返回x的正弦值,x以弧度為單位

cos(x)

atan2(y,x)

返回y/x的反正切值,以弧度為單位

rand() 返回(0,1)內滿足均勻分布的隨機數,

srand([x]) 為隨機數設定開始點或者種子。每個種子對應一組隨機數序列

-f fs 指定描繪一行中資料字段的檔案分隔符

-f file 指定讀取程式的檔名

-v var=value 定義gawk程式中使用的變數和預設值

-mf n 指定資料檔案中要處理的字段的最大數目

-mr n 指定資料檔案中的最大記錄大小

-w keyword 指定gawk的相容模式或警告級別

gawk的主要功能之一是其處理文字檔案中資料的能力。它通過自動將變數分配給每行中的每個資料元素實現這一功能。預設情況下,gawk將下面的變數分配給在文字行中檢測到的每個資料字段:

◆ $0表示整行文字

◆ $1表示文字行中的第乙個資料字段

◆ $2表示文字行中的第二個資料字段

◆ $n表示文字行中的第n個資料字段

各資料字段依據文字行中的字段分隔符確定。gawk讀取一行文字時,使用定義的字段分隔符描述各資料字段。gawk的預設字段分隔符是任意空白字元(如製表符或空格符)

begin關鍵字是在處理任何資料之前應用的命令,即執行該gawk命令行時首先會去執行begin所指定的命令,這裡是print 「helloworld!」,接下去是我們輸入的資料,輸入之後回車會立刻顯示相應的內容,也就是我們輸入的內容,直到按ctrl-d,然後該gawk命令接結束了,但是結束之後還要之end後的結尾命令。這樣整個過程就結束了。

awk使用筆記

awk 使用筆記 今天一同事需要將乙個檔案的第 31列和第 32列的數字行替換為 86。因為檔案很大,因此用手工來改顯然不顯示,因此得求助於指令碼工具。雖然我對這些指令碼也不是很精通,但既然答應幫這個忙,就現學現用,完成了這個功能,記錄如下。為了方便記錄我將該檔案簡化一下成下面的格式,檔名為 tes...

awk使用筆記

此文件主要記錄各種實際工作中awk的一些應用,方便以後類似功能的應用,隨時增加新的案例。一。如何用awk同時處理多個檔案 awk nr fnr nr fnr b nr fnr b c data1.txt data2.txt data3.txt 按照此方法,理論上來說,可處理n多個有關聯欄位的檔案,之...

awk 命令使用筆記

awk 預設以空格或tab分割,0代表整行,1代表分割後的第乙個單詞,以此類推,上面例子會列印出分隔符後第乙個單詞和 補充字段 awk f 關鍵字 filename eg awk f update ids.sql 這裡 f 代表以什麼符號分割,中間是關鍵字 用來獲取有這個關鍵字的行。awk f 分隔...