14.8.gawk的內建函式
14.8.1. 字串函式
*sub函式匹配記錄中最大、最靠左邊的子字串的正規表示式,並用替換字串替換這些字串。如果沒有指定目標字串就預設使用整
個記錄。替換只發生在第一次匹配的時候。格式如下:
sub (regular expression_r, substitution string):
sub (regular expression_r, substitution string, target string)
例項:gawk.exe "" testfile
gawk.exe "; print }" testfile
第乙個例子在整個記錄中匹配,替換只發生在第一次匹配發生的時候。如要在整個檔案中進行匹配需要用到gsub
第二個例子在整個記錄的第乙個域中進行匹配,替換只發生在第一次匹配發生的時候。
*gsub函式作用如sub,但它在整個文件中進行匹配。格式如下:
gsub (regular expression_r, substitution string)
gsub (regular expression_r, substitution string, target string)
例項:gawk.exe "" testfile
gawk.exe "; print }" testfile
第乙個例子在整個文件中匹配test,匹配的都被替換成mytest。
第二個例子在整個文件的第乙個域中匹配,所有匹配的都被替換成mytest。
*index函式返回子字串第一次被匹配的位置,偏移量從位置1開始。格式如下:
index(string, substring)
例項:gawk.exe "" testfile
例項返回test在mytest的位置,結果應該是3。
*length函式返回記錄的字元數。格式如下:
length( string )
length
例項:gawk.exe ""
gawk.exe "" testfile
第乙個例項返回test字串的長度。
第二個例項返回testfile檔案中第條記錄的字元數。
*substr函式返回從位置1開始的子字串,如果指定長度超過實際長度,就返回整個字串。格式如下:
substr( string, starting position )
substr( string, starting position, length of string )
例項:gawk.exe ""
上例擷取了world子字串。
*match函式返回在字串中正規表示式位置的索引,如果找不到指定的正規表示式則返回0。match函式會設定內建變數rstart為字串中子字串的開始位置,rlength為到子字串末尾的字元個數。substr可利於這些變數來擷取字串。函式格式如下:
match( string, regular expression_r )
例項:gawk.exe ""
gawk.exe ""
第乙個例項列印以連續小寫字元結尾的開始位置,這裡是11。
第二個例項還列印rstart和rlength變數,這裡是11(start),11(rstart),4(rlength)。
*toupper和tolower函式可用於字串大小間的轉換,該功能只在gawk中有效。格式如下:
toupper( string )
tolower( string )
例項:gawk.exe ""
*split函式可按給定的分隔符把字串分割為乙個陣列。如果分隔符沒提供,則按當前fs值進行分割。格式如下:
split( string, array, field separator )
split( string, array )
例項:gawk.exe ""
上例把時間按冒號分割到time陣列內,並顯示第二個陣列元素18。
14.8.2. 時間函式
*systime函式返回從2023年1月1日開始到當前時間(不計閏年)的整秒數。格式如下:
systime()
例項:gawk.exe ""
*strftime函式使用c庫中的strftime函式格式化時間。格式如下:
systime( [format specification][,timestamp] )
table 3. 日期和時間格式說明符
格式 描述
%a 星期幾的縮寫(sun)
%a 星期幾的完整寫法(sunday)
%b 月名的縮寫(oct)
%b 月名的完整寫法(october)
%c 本地日期和時間
%d 十進位制日期
%d 日期 08/20/99
%e 日期,如果只有一位會補上乙個空格
%h 用十進位制表示24小時格式的小時
%i 用十進位制表示12小時格式的小時
%j 從1月1日起一年中的第幾天
%m 十進位制表示的月份
%m 十進位制表示的分鐘
%p 12小時表示法(am/pm)
%s 十進位制表示的秒
%u 十進位制表示的一年中的第幾個星期(星期天作為乙個星期的開始)
%w 十進位制表示的星期幾(星期天是0)
%w 十進位制表示的一年中的第幾個星期(星期一作為乙個星期的開始)
%x 重新設定本地日期(08/20/99)
%x 重新設定本地時間(12:00:00)
%y 兩位數字表示的年(99)
%y 當前月份
%z 時區(pdt)
%% 百分號(%)
例項:gawk.exe ""
gawk.exe ""
14.8.3. 內建數學函式
table 4.
函式名稱 返回值
atan2(x,y) y,x範圍內的餘切
cos(x) 余弦函式
exp(x) 求冪
int(x) 取整
log(x) 自然對數
rand() 隨機數
sin(x) 正弦
sqrt(x) 平方根
srand(x) x是rand()函式的種子
int(x) 取整,過程沒有捨入
rand() 產生乙個大於等於0而小於1的隨機數
14.8.4. 自定義函式
在awk中還可自定義函式,格式如下:
function name ( parameter, parameter, parameter, ... )
15. how-to
*如何把一行豎排的資料轉換成橫排?
gawk.exe "" filename
Windows上GAWK的使用 二
gawk內建環境變數 變數 描述 n 當前記錄的第n個字段,欄位間由fs分隔。0 完整的輸入記錄。argc 命令列引數的數目。argind 命令列中當前檔案的位置 從0開始算 argv 包含命令列引數的陣列。convfmt 數字轉換格式 預設值為 6g environ 環境變數關聯陣列。errno ...
Windows上GAWK的使用 三
9.匹配操作符 用來在記錄或者域內匹配正規表示式。如gawk.exe 1 root test.txt將顯示test檔案第一列中以root開頭的行。10.比較表示式 conditional expression r1 expression r2 expression r3,例如 gawk.exe 1 ...
Windows上GAWK的使用 五
14.8.gawk的內建函式 14.8.1.字串函式 sub函式匹配記錄中最大 最靠左邊的子字串的正規表示式,並用替換字串替換這些字串。如果沒有指定目標字串就預設使用整 個記錄。替換只發生在第一次匹配的時候。格式如下 sub regular expression r,substitution str...