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