awk 程式設計

2021-06-23 01:08:56 字數 4234 閱讀 5354

形式: awk options 'code' filename

比如:

awk-f

"a"'

'filename

#這裡用字元

a作為行分隔符,預設是空格

awk-

fmyscript

.awk

filename_in#如果

code

部分太長,或者要重用,可以寫成

awk指令碼

**裡可以分成3部分。"begin 條件 end"

中間那個**是針對filename文字的每行都執行的。而begin和end顧名思義,是在awk程式執行前和結束的時候才執行。

比如統計乙個文字的非空行數

awk 'begin $0 !~ /./ end ' filename

其中begin這個**塊也可以省略,因為awk中變數預設為0.

中間的判斷語句也可以寫到**塊中, }

2.1 高階輸出

printf是高階輸出,比如awk '' filename

用%做格式化,形式類似於c語言的。

一般printf都需要加\n,他不像print那樣,printf不會自動換行。

2.2 條件判斷

上面例子中,我們篩選非空的行,用 $0(這一行的文字) !~ (不正則匹配) /./ (包含任意字元的正規表示式)

初期之外,還可以$2 * $3 > 50第2欄位與第3欄位之積 超過50

$1 == "gausszh"第1欄位的值為字串 "gausszh"

/gausszh[0-9]/如果沒有指明哪個字段就是這一行要包含 這個正則,這裡比如abc edd gausszh0990 zzz

多個條件之間可以用與或非來組合。

2.3 程式處理

awk支援 四則運算那些 $2 * $3 , $2 / $3 這些。所以平均數可以這樣算 row_num/nr

字串的拼接用空格 ,str = "hehe" name

awk 也支援一般的 if else 語句,for語句 ,while語句

資料結構方面:

內建函式

函式名說明

atan2( y, x )

返回 y/x 的反正切。

cos( x )

返回 x 的余弦;x 是弧度。

sin( x )

返回 x 的正弦;x 是弧度。

exp( x )

返回 x 冪函式。

log( x )

返回 x 的自然對數。

sqrt( x )

返回 x 平方根。

int( x )

返回 x 的截斷至整數的值。

rand( )

返回任意數字 n,其中 0 <= n < 1。

srand( [expr] )

將 rand 函式的種子值設定為 expr 引數的值,或如果省略 expr 引數則使用某天的時間。返回先前的種子值

內建字串處理函式

函式名說明

gsub( ere, repl, [ in ] )

除了正規表示式所有具體值被替代這點,它和 sub 函式完全一樣地執行,。

sub( ere, repl, [ in ] )

用 repl 引數指定的字串替換 in 引數指定的字串中的由 ere 引數指定的擴充套件正規表示式的第乙個具體值。sub 函式返回替換的數量。出現在 repl 引數指定的字串中的 &(和符號)由 in 引數指定的與 ere 引數的指定的擴充套件正規表示式匹配的字串替換。如果未指定 in 引數,預設值是整個記錄($0 記錄變數)。

index( string1, string2 )

在由 string1 引數指定的字串(其中有出現 string2 指定的引數)中,返回位置,從 1 開始編號。如果 string2 引數不在 string1 引數中出現,則返回 0(零)。

length [(string)]

返回 string 引數指定的字串的長度(字元形式)。如果未給出 string 引數,則返回整個記錄的長度($0 記錄變數)。

blength [(string)]

返回 string 引數指定的字串的長度(以位元組為單位)。如果未給出 string 引數,則返回整個記錄的長度($0 記錄變數)。

substr( string, m, [ n ] )

返回具有 n 引數指定的字元數量子串。子串從 string 引數指定的字串取得,其字元以 m 引數指定的位置開始。m 引數指定為將 string 引數中的第乙個字元作為編號 1。如果未指定 n 引數,則子串的長度將是 m 引數指定的位置到 string 引數的末尾 的長度。

match( string, ere )

在 string 引數指定的字串(ere 引數指定的擴充套件正規表示式出現在其中)中返回位置(字元形式),從 1 開始編號,或如果 ere 引數不出現,則返回 0(零)。rstart 特殊變數設定為返回值。rlength 特殊變數設定為匹配的字串的長度,或如果未找到任何匹配,則設定為 -1(負一)。

split( string, a, [ere] )

將 string 引數指定的引數分割為陣列元素 a[1], a[2], . . ., a[n],並返回 n 變數的值。此分隔可以通過 ere 引數指定的擴充套件正規表示式進行,或用當前字段分隔符(fs 特殊變數)來進行(如果沒有給出 ere 引數)。除非上下文指明特定的元素還應具有乙個數字值,否則 a 陣列中的元素用字串值來建立。

tolower( string )

返回 string 引數指定的字串,字串中每個大寫字元將更改為小寫。大寫和小寫的對映由當前語言環境的 lc_ctype 範疇定義。

toupper( string )

返回 string 引數指定的字串,字串中每個小寫字元將更改為大寫。大寫和小寫的對映由當前語言環境的 lc_ctype 範疇定義。

sprintf(format, expr, expr, . . . )

根據 format 引數指定的 printf 子例程格式字串來格式化 expr 引數指定的表示式並返回最後生成的字串。

一般函式

函式名說明

system(command )

執行 command 引數指定的命令,並返回退出狀態。等同於 system 子例程。

close( expression )

用同乙個帶字串值的 expression 引數來關閉由 print 或 printf 語句開啟的或呼叫 getline 函式開啟的檔案或管道。如果檔案或管道成功關閉,則返回 0;其它情況下返回非零值。如果打算寫乙個檔案,並稍後在同乙個程式中讀取檔案,則 close 語句是必需的。

expression

getline [ variable ]

getline [ variable ] < expression

從 expression 引數指定的檔案讀取輸入的下乙個記錄,並將 variable 引數指定的變數設定為該記錄的值。只要流保留開啟且 expression 引數對同乙個字串求值,則對 getline 函式的每次後續呼叫讀取另乙個記錄。如果未指定 variable 引數,則 $0 記錄變數和 nf 特殊變數設定為從流讀取的記錄。

getline [ variable ]

將 variable 引數指定的變數設定為從當前輸入檔案讀取的下乙個輸入記錄。如果未指定 variable 引數,則 $0 記錄變數設定為該記錄的值,還將設定 nf、nr 和 fnr 特殊變數。

可用的內建變數

變數名含義

nf該行的字段數量 print nf,所以可以用 $nf去最後一行, $(nf-1)倒數第二行, print $(nf-1)

nr行號

$0這一行的文字

$n行的第n個字段,比如 $1

可以接檔名,如果為空,則是標準輸入端。

4.1 陣列

不用宣告, 可以直接用。從c++的角度理解, awk的陣列可以當作c++的陣列和map用

lt[0] = "a";

lt[1] = "b";

for(i=0; i < 2; i = i + 1)

print lt[i]

/* == 也可以 == */

lt["gausszh"] = 100

lt["alice"] = 99

for(k in lt)

print k, lt[k]

awk程式設計

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

awk程式設計

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

awk程式設計

2017年1月10日,星期二 awk awk是乙個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。awk 案例 顯示最近登入的5個帳號 last n 5 awk 讀入有 n 換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域 0則表...