Windows上GAWK的使用 五

2021-06-19 14:14:12 字數 3291 閱讀 3394

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的使用 一

現在經常要處理到一些日誌資料,對這些資料進行分析處理,但首先要對日誌資料進行etl處理,如果簡單的資料格式處理,使用gawk是最理想不過了,下面我們就介紹如何使用gawk,對資料進行e extract 處理。二.gawk的基本語法.1.gawk格式.gawk options begin patter...