Section Next | Prev


4.2.8 組み込み関数

awk には種々の関数が組み込まれており、ユーザが独自に定義することもできます。 関数には大きく数値型と文字型があり、主なものは次の通りです。

主な数値型関数
関数書式 意味
sin(r) ラジアン(r)の正弦
cos(r) ラジアン(r)の余弦
sqrt(n) n の平方根
log(n) n 自然対数
int(f) f を越えない整数を返す
rand() 0以上1未満の乱数を返す。なお初期化は srand() による

例題: 0〜3.14 まで 0.06[rad] 刻みの正弦を得る

	$ awk 'END{for(r=0.0;r<3.14;r+=0.06) print r "\t" sin(r)}' /dev/null
	0       0
	0.06    0.059964
	0.12    0.119712
	0.18    0.17903
	0.24    0.237703
		:

主な文字型関数
関数書式 意味
[g]sub(ptn,str[,data]) 変数data(省略時 $0)の正規表現ptnで一致する文字列をstrに置換。 gsub は繰り返し置換。
index(str1,str2) 文字列str1に部分文字列str2が初めて登場する位置を返す
length(str) 文字列strの長さ
substr(str,begin[,len]) 文字列strの開始位置begin,長さlen(省略時はstrの最後まで)部分文字列を返す
toupper(str) 文字列strを大文字に変換
tolower(str) 文字列strを小文字に変換

簡単な例題集

  1. 大文字/小文字の置換
    	$ uname -a
    	OSF1 ws-1.rcnp.osaka-u.ac.jp V4.0 464 alpha
    	$ uname -a | awk '{print tolower($0)}'
    	osf1 ws-1.rcnp.osaka-u.ac.jp v4.0 464 alpha
    	$ uname -a | awk '{print toupper($0)}'
    	OSF1 WS-1.RCNP.OSAKA-U.AC.JP V4.0 464 ALPHA
    
    
  2. 数字[0-9]の削除
    	$ uname -a | awk '{gsub("[0-9]","");print}'
    	OSF ws-.rcnp.osaka-u.ac.jp V.  alpha
    
  3. 文字列の分割
    substr は文字列を特定の位置から、必要な長さだけ取り出します。
    長さを省略した場合は、指定位置から文字列の終わりまでを取り出します。
    【書式】 substr( 文字列, 開始位置 [,長さ] )
    
    	$ nawk '{print substr($0,1,5) }' /etc/passwd
    	root:
    	nobod
    	nobod
    	daemo
    	bin:*
    	uucp:
    

  4. 文字列の位置
    index は指定した文字列の中から部分文字列の位置を返します。
    部分文字列が含まれない場合は0を返します。
    【書式】 index( 文字列, 部分文字列  )
    
    	$ nawk '{ printf "[%d]%s\n", index( "Digital UNIX", $0),$0 }'
    	a
    	[6]a
    	A
    	[0]A
    	UNIX
    	[9]UNIX
    	^D
    

Section Next | Prev