awk簡(jiǎn)介與學(xué)習(xí)筆記收集
更新時(shí)間:2008年04月24日 19:58:23 作者:
Awk學(xué)習(xí)筆記
整理:Jims of 肥肥世家
<jims.yang@gmail.com>
gsub函數(shù)作用如sub,但它在整個(gè)文檔中進(jìn)行匹配。格式如下:
gsub (regular expression, substitution string)
gsub (regular expression, substitution string, target string)
實(shí)例:
$ awk '{ gsub(/test/, "mytest"); print }' testfile
$ awk '{ gsub(/test/, "mytest"), $1 }; print }' testfile
第一個(gè)例子在整個(gè)文檔中匹配test,匹配的都被替換成mytest。
第二個(gè)例子在整個(gè)文檔的第一個(gè)域中匹配,所有匹配的都被替換成mytest。
index函數(shù)返回子字符串第一次被匹配的位置,偏移量從位置1開始。格式如下:
index(string, substring)
實(shí)例:
$ awk '{ print index("test", "mytest") }' testfile
實(shí)例返回test在mytest的位置,結(jié)果應(yīng)該是3。
length函數(shù)返回記錄的字符數(shù)。格式如下:
length( string )
length
實(shí)例:
$ awk '{ print length( "test" ) }'
$ awk '{ print length }' testfile
第一個(gè)實(shí)例返回test字符串的長(zhǎng)度。
第二個(gè)實(shí)例返回testfile文件中第條記錄的字符數(shù)。
substr函數(shù)返回從位置1開始的子字符串,如果指定長(zhǎng)度超過(guò)實(shí)際長(zhǎng)度,就返回整個(gè)字符串。格式如下:
substr( string, starting position )
substr( string, starting position, length of string )
實(shí)例:
$ awk '{ print substr( "hello world", 7,11 ) }'
上例截取了world子字符串。
match函數(shù)返回在字符串中正則表達(dá)式位置的索引,如果找不到指定的正則表達(dá)式則返回0。match函數(shù)會(huì)設(shè)置內(nèi)建變量RSTART為字符串中子字符串的開始位置,RLENGTH為到子字符串末尾的字符個(gè)數(shù)。substr可利于這些變量來(lái)截取字符串。函數(shù)格式如下:
match( string, regular expression )
實(shí)例:
$ awk '{start=match("this is a test",/[a-z]+$/); print start}'
$ awk '{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
第一個(gè)實(shí)例打印以連續(xù)小寫字符結(jié)尾的開始位置,這里是11。
第二個(gè)實(shí)例還打印RSTART和RLENGTH變量,這里是11(start),11(RSTART),4(RLENGTH)。
toupper和tolower函數(shù)可用于字符串大小間的轉(zhuǎn)換,該功能只在gawk中有效。格式如下:
toupper( string )
tolower( string )
實(shí)例:
$ awk '{ print toupper("test"), tolower("TEST") }'
split函數(shù)可按給定的分隔符把字符串分割為一個(gè)數(shù)組。如果分隔符沒(méi)提供,則按當(dāng)前FS值進(jìn)行分割。格式如下:
split( string, array, field separator )
split( string, array )
實(shí)例:
$ awk '{ split( "20:18:00", time, ":" ); print time[2] }'
上例把時(shí)間按冒號(hào)分割到time數(shù)組內(nèi),并顯示第二個(gè)數(shù)組元素18。
14.8.2. 時(shí)間函數(shù)
systime函數(shù)返回從1970年1月1日開始到當(dāng)前時(shí)間(不計(jì)閏年)的整秒數(shù)。格式如下:
systime()
實(shí)例:
$ awk '{ now = systime(); print now }'
strftime函數(shù)使用C庫(kù)中的strftime函數(shù)格式化時(shí)間。格式如下:
systime( [format specification][,timestamp] )
Table 3. 日期和時(shí)間格式說(shuō)明符
格式 描述
%a 星期幾的縮寫(Sun)
%A 星期幾的完整寫法(Sunday)
%b 月名的縮寫(Oct)
%B 月名的完整寫法(October)
%c 本地日期和時(shí)間
%d 十進(jìn)制日期
%D 日期 08/20/99
%e 日期,如果只有一位會(huì)補(bǔ)上一個(gè)空格
%H 用十進(jìn)制表示24小時(shí)格式的小時(shí)
%I 用十進(jìn)制表示12小時(shí)格式的小時(shí)
%j 從1月1日起一年中的第幾天
%m 十進(jìn)制表示的月份
%M 十進(jìn)制表示的分鐘
%p 12小時(shí)表示法(AM/PM)
%S 十進(jìn)制表示的秒
%U 十進(jìn)制表示的一年中的第幾個(gè)星期(星期天作為一個(gè)星期的開始)
%w 十進(jìn)制表示的星期幾(星期天是0)
%W 十進(jìn)制表示的一年中的第幾個(gè)星期(星期一作為一個(gè)星期的開始)
%x 重新設(shè)置本地日期(08/20/99)
%X 重新設(shè)置本地時(shí)間(12:00:00)
%y 兩位數(shù)字表示的年(99)
%Y 當(dāng)前月份
%Z 時(shí)區(qū)(PDT)
%% 百分號(hào)(%)
實(shí)例:
$ awk '{ now=strftime( "%D", systime() ); print now }'
$ awk '{ now=strftime("%m/%d/%y"); print now }'
14.8.3. 內(nèi)建數(shù)學(xué)函數(shù)
Table 4.
函數(shù)名稱 返回值
atan2(x,y) y,x范圍內(nèi)的余切
cos(x) 余弦函數(shù)
exp(x) 求冪
int(x) 取整
log(x) 自然對(duì)數(shù)
rand() 隨機(jī)數(shù)
sin(x) 正弦
sqrt(x) 平方根
srand(x) x是rand()函數(shù)的種子
int(x) 取整,過(guò)程沒(méi)有舍入
rand() 產(chǎn)生一個(gè)大于等于0而小于1的隨機(jī)數(shù)
14.8.4. 自定義函數(shù)
在awk中還可自定義函數(shù),格式如下:
function name ( parameter, parameter, parameter, ... ) {
statements
return expression # the return statement and expression are optional
}
15. How-to
如何把一行豎排的數(shù)據(jù)轉(zhuǎn)換成橫排?
awk '{printf("%s,",$1)}' filename
完整版本
相關(guān)文章
javascript 小型動(dòng)畫組件與實(shí)現(xiàn)代碼
javascript 小型動(dòng)畫組件與實(shí)現(xiàn)代碼,想要學(xué)習(xí)js動(dòng)畫的朋友可以參考下。思路確實(shí)很實(shí)用。2010-06-06
影響PHP+MYSQL執(zhí)行速度的寫法對(duì)比
影響PHP+MYSQL執(zhí)行速度的寫法對(duì)比...2007-01-01
php為什么選mysql作為數(shù)據(jù)庫(kù)? Mysql 創(chuàng)建用戶方法
php為什么選mysql作為數(shù)據(jù)庫(kù)? Mysql 創(chuàng)建用戶方法...2007-07-07
php教程 插件機(jī)制在PHP中實(shí)現(xiàn)方案
PHP中插件機(jī)制的一種實(shí)現(xiàn)方案. 這篇文章的出發(fā)點(diǎn)是我對(duì)插件機(jī)制的理解,及其在PHP中的實(shí)現(xiàn)。此方案僅是插件機(jī)制在PHP中的2012-11-11
PHP 開源框架22個(gè)簡(jiǎn)單簡(jiǎn)介
PHP 是一個(gè)被廣泛使用的來(lái)進(jìn)行Web開發(fā)的腳本語(yǔ)言。雖然有很多其它可供選擇的Web開發(fā)語(yǔ)言,像:ASP 和Ruby,但是PHP是目前為止世界上最為流行的。2009-08-08

