形式: 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則表...