awk
提供了許多強大的字元串函數,見下表:
内置字元串函數
gsub(r,s)
在整個
$0
中用
s
替代
r
gsub(r,s,t)
t
index(s,t)
傳回
中字元串
的第一位置
length(s)
長度
match(s,r)
測試
是否包含比對
r
的字元串
split(s,a,fs)
在
fs
上将
分成序列
a
sprint(fmt,exp)
傳回經
fmt
格式化後的
exp
sub(r,s)
用
中最左邊最長的子串代替
s
substr(s,p)
傳回字元串
中從
p
開始的字尾部分
substr(s,p,n)
開始長度為
n
的字尾部分
詳細說明一下各個函數的使
用方法。
gsub
函數有點類似于
sed
查找和替換。它允許替換一個字元串或字元為另一個字元串或字
符,并以正規表達式的形式執行。第一個函數作用于記錄
,第二
個
函數允許指定
目标,然而,如果未指定目标,預設為
。
index(s,t)
函數傳回目标字元串
中查詢字元串
的首位置。
length
函數傳回字元串
字元
長度。
match
函數測試字元串
是否包含一個正規表達式
定義的比對。
split
使用域分隔
符
将
字元串
劃分為指定序列
a
sprint
函數類似于
printf
函數
(
以後涉及
)
,
傳回基本輸出格式
的
結果字元串
exp
sub(r,s)
函數将用
中最左邊最長的子串,該子串被
(r)
比對。
sub(s,p)
在位置
後的字尾。
substr(s,p,n)
同上,并指定子串長度為
現在看一看
中這些字元串函數的功能。
1.gsub
要在整個記錄中替換一個字元串為另一個,使用正規表達式格式,
/
目标模式
,替換模式
。例如改變學生序号
4842
到
4899
:
$ awk 'gsub('4842/, 4899) {print $0}' grade.txt
J.Troll 07/99 4899 Brown-3 12 26 26
echo "i am hifdafafdst"|awk '{gsub(/am/,"abcc",$0);print $0}'
i abcc hifdafafdst
2.index
查詢字元串
中
出現的第一位置。必須用雙引号将字元串括起來。例如傳回目标字元串
Bunny
ny
出現的第一位置,即字元個數。
$ awk 'BEGIN {print index("Bunny", "ny")} grade.txt
3.length