awk 內置變量和函數

awk 內置變量和函數
awk內置變量(預定義變量)
變量 含義 缺省值
--------------------------------------------------------
ARGC 命令行上除了選項-F,-v,-f以及這些選項所對應的參數之外的所有參數的個數
awk -F,  'END{print ARGC}' test
參數爲2個,awk和test
 
ARGIND 當前被處理文件的ARGV標誌符
awk -F,  'END{print ARGIND}' test
test在命令行的位置爲1
 
ARGV 命令行參數數組
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
 
ENVIRON UNIX環境變量
awk -F,  'END{for(var in ENVIRON){print var,ENVIRON[var]}}' test
打印環境變量的名和值
ERRNO UNIX最後一個系統錯誤消息
FILEDWIDTHS 輸入字段寬度的空白分隔字符串
字段寬度列表(用空格鍵分隔)。替換FS分隔符
awk 'BEGIN{FIELDWIDTHS="1 2"}{print $1,$2}' test
打印出:
T es

FILENAME 當前輸入文件的名字
FNR 當前文件記錄數,變換文件重新計算
FS 輸入字段分隔符 空格
 
IGNORECASE 控制大小寫敏感0(大小寫敏感)
awk 'BEGIN{IGNORECASE=1}/test/' test
打印出:
1 Test
2 test
 
NF 當前記錄中的字段個數
NR 已經讀出的記錄數
 
OFMT 數字的輸出格式 %.6g
awk 'BEGIN{OFMT="%.4g"}END{print 172.345678;}' test
打印出:172.3
 
OFS 輸出字段分隔符 空格
ORS 輸出的記錄分隔符 新行
RS 輸入的記錄分隔符 新行
RSTART 被匹配函數匹配的字符串的第一個位置
RLENGTH 被匹配函數匹配的字符串長度
由match函數所匹配的字符串的第一個位置。
awk 'END{match("hello test!",/st!$/);print RSTART,RLENGTH}' test
打印出:9  3  (從1開始數)
 
SUBSEP 下標分隔符 "\034"
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
 
 
awk的內置函數
函數 用途或返回值
------------------------------------------------
gsub(reg,string,target) 每次常規表達式reg匹配時替換target中的string
#awk 'BEGIN{x="xyzabcxyzabcxyz";gsub(/abc/,"ABC",x);print x}'
xyzABCxyzABCxyz
 
gensub(正則,替換,範圍,目標串)
#awk 'BEGIN{print gensub("zorro","AAAA","2",seker zorro zorro seker)}'
seker zorro AAAA seker
 
index(search,string) 返回string中search串的位置
awk 'BEGIN{info="this is a test2010test!";print index(info,"test")}'      
11
 
length(string) 求串string中的字符個數
awk 'BEGIN{print length("test1234")}'
8
 
match(string,reg) 返回常規表達式reg匹配的string中的位置
awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)}'      
15
 
printf(format,variable) 格式化輸出,按format提供的格式輸出變量variable。

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
 
sprintf(format,variable) 返回一個包含基於format的格式化數據,variables是要放到串中的數據
strftime(format,timestamp) 返回一個基於format的日期或者時間串,timestmp是systime()函數返回的時間
sub(reg,string,target) 第一次當常規表達式reg匹配,替換target串中的字符串
substr(string,position,len) 返回一個以position開始len個字符的子串
awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes
 
tolower(string) 返回string中對應的小寫字符
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的平方根
 
srand(x) 初始化隨機數發生器。如果忽略x,則使用系統時間
#awk 'BEGIN{srand();fr=int(100*rand());print fr;}'
78
 
system() 執行系統命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章