awk內置變量(預定義變量)
--------------------------------------------------------
ARGC 命令行上除了選項-F,-v,-f以及這些選項所對應的參數之外的所有參數的個數
awk -F, 'END{print ARGC}' test
參數爲2個,awk和test
awk -F, 'END{print ARGIND}' test
test在命令行的位置爲1
awk -F, 'END{print ARGV[0],ARGV[1]}' test
打印awk test
CONVFMT 數字轉換成字符串格式默認爲 %.6g
awk 'BEGIN{CONVFMT="%.6g"}END{a=172.345678;b=a"";print b;}' test
將數字a轉換成字符串b時的轉換格式
輸出:172.346
awk -F, 'END{for(var in ENVIRON){print var,ENVIRON[var]}}' test
打印環境變量的名和值
FILEDWIDTHS 輸入字段寬度的空白分隔字符串
字段寬度列表(用空格鍵分隔)。替換FS分隔符
awk 'BEGIN{FIELDWIDTHS="1 2"}{print $1,$2}' test
打印出:
T es
FILENAME 當前輸入文件的名字
FNR 當前文件記錄數,變換文件重新計算
FS 輸入字段分隔符 空格
awk 'BEGIN{IGNORECASE=1}/test/' test
打印出:
1 Test
2 test
NR 已經讀出的記錄數
awk 'BEGIN{OFMT="%.4g"}END{print 172.345678;}' test
打印出:172.3
ORS 輸出的記錄分隔符 新行
RS 輸入的記錄分隔符 新行
RLENGTH 被匹配函數匹配的字符串長度
由match函數所匹配的字符串的第一個位置。
awk 'END{match("hello test!",/st!$/);print RSTART,RLENGTH}' test
打印出:9 3 (從1開始數)
awk 'BEGIN{array[0,0]="test1";array[0,1]="test2";}END{for(var in array){print var,SUBSEP,array[var]}}' test
輸出:其中SUBSEP替換了0,0中的逗號,(經測試不加SUBSEP,結果一樣)?
00 test1
01 test2
函數 用途或返回值
------------------------------------------------
gsub(reg,string,target) 每次常規表達式reg匹配時替換target中的string
#awk 'BEGIN{x="xyzabcxyzabcxyz";gsub(/abc/,"ABC",x);print x}'
xyzABCxyzABCxyz
#awk 'BEGIN{print gensub("zorro","AAAA","2",seker zorro zorro seker)}'
seker zorro AAAA seker
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")}'
11
awk 'BEGIN{print length("test1234")}'
8
awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)}'
15
split(string,store,delim) 根據分界符delim,分解string爲store的數組元素
awk 'BEGIN{info="this is a test";split(info,tA," ");for(k in tA){print k,tA[k];}}'
4 test
1 this
2 is
3 a
strftime(format,timestamp) 返回一個基於format的日期或者時間串,timestmp是systime()函數返回的時間
substr(string,position,len) 返回一個以position開始len個字符的子串
awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes
toupper(string) 返回string中對應的大寫字符
atan(x,y) x的餘切(弧度)
cos(x) x的餘弦(弧度)
exp(x) e的x冪
int(x) x的整數部分
log(x) x的自然對數值
rand() 0-1之間的隨機數
sin(x) x的正弦(弧度)
sqrt(x) x的平方根
#awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
78