歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux awk的內建函數

Linux awk的內建函數

日期:2017/2/28 15:57:26   编辑:Linux教程

awk的內建函數

1. 字符串函數

sub函數匹配記錄中最大、最靠左邊的子字符串的正則表達式,並用替換字符串替換這些字符串。如果沒有指定目標字符串就默認使用整個記錄。替換只發生在第一次匹配的時候。格式如下:

sub (regular expression, substitution string):

sub (regular expression, substitution string, target string)

實例:

$ awk '{ sub(/test/, "mytest"); print }' testfile

$ awk '{ sub(/test/, "mytest"); $1}; print }' testfile

第一個例子在整個記錄中匹配,替換只發生在第一次匹配發生的時候。如要在整個文件中進行匹配需要用到gsub

第二個例子在整個記錄的第一個域中進行匹配,替換只發生在第一次匹配發生的時候。

gsub函數作用如sub,但它在整個文檔中進行匹配。格式如下:

gsub (regular expression, substitution string)

gsub (regular expression, substitution string, target string)

實例:

$ awk '{ gsub(/test/, "mytest"); print }' testfile

$ awk '{ gsub(/test/, "mytest"), $1 }; print }' testfile

第一個例子在整個文檔中匹配test,匹配的都被替換成mytest。

第二個例子在整個文檔的第一個域中匹配,所有匹配的都被替換成mytest。

index函數返回子字符串第一次被匹配的位置,偏移量從位置1開始。格式如下:

index(string, substring)

實例:

$ awk '{ print index("test", "mytest") }' testfile

實例返回test在mytest的位置,結果應該是3。

length函數返回記錄的字符數。格式如下:

length( string )

length

實例:

$ awk '{ print length( "test" ) }'

$ awk '{ print length }' testfile

第一個實例返回test字符串的長度。

第二個實例返回testfile文件中第條記錄的字符數。

substr函數返回從位置1開始的子字符串,如果指定長度超過實際長度,就返回整個字符串。格式如下:

substr( string, starting position )

substr( string, starting position, length of string )

實例:

$ awk '{ print substr( "hello world", 7,11 ) }'

上例截取了world子字符串。

match函數返回在字符串中正則表達式位置的索引,如果找不到指定的正則表達式則返回0。match函數會設置內建變量RSTART為字符串中子字符串的開始位置,RLENGTH為到子字符串末尾的字符個數。substr可利於這些變量來截取字符串。函數格式如下:

match( string, regular expression )

實例:

$ awk '{start=match("this is a test",/[a-z]+$/); print start}'

$ awk '{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'

第一個實例打印以連續小寫字符結尾的開始位置,這裡是11。

第二個實例還打印RSTART和RLENGTH變量,這裡是11(start),11(RSTART),4(RLENGTH)。

toupper和tolower函數可用於字符串大小間的轉換,該功能只在gawk中有效。格式如下:

toupper( string )

tolower( string )

實例:

$ awk '{ print toupper("test"), tolower("TEST") }'

split函數可按給定的分隔符把字符串分割為一個數組。如果分隔符沒提供,則按當前FS值進行分割。格式如下:

split( string, array, field separator )

split( string, array )

實例:

$ awk '{ split( "20:18:00", time, ":" ); print time[2] }'

上例把時間按冒號分割到time數組內,並顯示第二個數組元素18。

2. 時間函數

systime函數返回從1970年1月1日開始到當前時間(不計閏年)的整秒數。格式如下:

systime()

實例:

$ awk '{ now = systime(); print now }'

strftime函數使用C庫中的strftime函數格式化時間。格式如下:

systime( [format specification][,timestamp] )

實例:

$ awk '{ now=strftime( "%D", systime() ); print now }'

$ awk '{ now=strftime("%m/%d/%y"); print now }'

mktime:

mktime("年 月 日 時 分 秒") 返回指定時間與1970-1-1 00:00:00 之間相差的秒數

echo "" | awk 'BEGIN{print strftime("%Y-%m-%d %T",mktime("2011 01 01 13 00 00")+60)}'

Copyright © Linux教程網 All Rights Reserved