組み込み関数など

寄稿:東條遼平

サンプルプログラムの入力テキストには以下のものを使っています.(progreport)

programing report 123.4
Linux vine 4567 knoppix filter
java c 567 awk
hogehoge foofoo

int(x)

xの整数部分を取り出す.

$ awk 'BEGIN{print int(-3.9), int(4.5)}'
-3 4

sqrt(x)

xの平方根の絶対値の取得.

$ awk 'BEGIN{print sqrt(3.9), sqrt(4.5)}'
1.97484 2.12132

exp(x)

eのx乗を取得.

$ awk 'BEGIN{print exp(3.9), exp(1)}'
49.4024 2.71828

log(x)

xの自然対数を取得.

$ awk 'BEGIN{print log(2.71828459), log(1)}'
1 0

sin(x)

正弦を取得.xはラジアン.

$ awk 'BEGIN{print sin(1.570796), sin(3.1415926535897)}'
1 9.33812e-14

cos(x)

余弦を取得.xはラジアン.

$ awk 'BEGIN{print cos(1.570796), cos(3.1415926535897)}'
3.26795e-07 -1

atan2(y,x)

y/x逆正接をラジアンで取得.

$ awk 'BEGIN{print atan2(1,1), atan2(1.732, 1)}'
0.785398 1.04718

rand()

0<x<1となるランダムな値xを取得.ただし,起動する度同じ並びの値となる.

$ awk 'BEGIN{print rand(), rand(), rand()}'
0.237788 0.291066 0.845814
$ awk 'BEGIN{print rand(), rand(), rand()}'
0.237788 0.291066 0.845814

srand(x)

rand()のシードを設定.引数省略で時間がシードとなる.戻り値は前回のシード.

$ awk 'BEGIN{srand(); print rand(), rand(), rand()}'
0.816933 0.122664 0.18146
$ awk 'BEGIN{srand(); print rand(), rand(), rand()}'
0.421141 0.354221 0.73009
$ awk 'BEGIN{srand(1); print rand(), rand(), rand()}'
0.237788 0.291066 0.845814
$ awk 'BEGIN{srand(1); print rand(), rand(), rand()}'
0.237788 0.291066 0.845814
$ awk 'BEGIN{srand(1); print rand(), rand(), rand(), srand()}'
0.237788 0.291066 0.845814 1

index(str,find)

文字列strから文字列findを探し,最初にヒットした位置を返す.ヒットしなければゼロ.

$ awk 'BEGIN{print index("progreport", "ogre")}'
3
$ awk 'BEGIN{print index("progreport", "program")}'
0

length(str)

文字列strの文字数を返す.引数省略で$0が渡される.

$ awk 'BEGIN{print length("progreport")}'
10
$ awk 'BEGIN{print length(23.5)}'
4
$ awk '{print length(); print}' < progreport
23
programing report 123.4
31
Linux vine 4567 knoppix filter
14
java c 567 awk
15
hogehoge foofoo

match(str, r)

文字列strの中で正規表現rで表現される最も長く,最も左に位置する部分文字列の先頭 位置を予約変数RSTARTに,文字数をRLENGTHに格納.一致するものが無ければ RSTARTはゼロ,RLENGTHは-1となる.

$ awk 'BEGIN{match("hhohoghogo", "hog"); print RSTART, RLENGTH}'
4 3
$ awk 'BEGIN{match("hhohoghogo", "hoge"); print RSTART, RLENGTH}'
0 -1
$ awk 'BEGIN{match("hhohoghogo", /hog*/); print RSTART, RLENGTH}'
2 2
$ awk 'BEGIN{match("hhohoghogo", /hog.*/); print RSTART, RLENGTH}'
4 7

split(str, array, s)

文字列strを区切り文字列sで区切り,区切られた部分文字列をarray[1]から順に格納. 区切られた部分文字列の数を返す.sを省略することで予約変数FSが区切り文字列として使われる.

$ awk 'BEGIN{b=split("prog@report@awk",a,"@");for(i=0;i&lt;b;i++)print a[i+1]}'
prog
report
awk
$ awk 'BEGIN{b=split("prog@report@awk",a,"report");
 for(i=0;i&lt;b;i++) print a[i+1]}'
prog@
@awk
$ awk 'BEGIN{b = split("prog report awk", a);
 for(i=0; i&lt;b; i++) print a[i+1]}'
prog
report
awk
$ awk 'BEGIN{FS="@"; b = split("prog report awk", a);
 for(i=0; i&lt;b; i++) print a[i+1]}'
prog report awk

sprintf(fmt, ...)

表示せずに結果を文字列として返すprintf.

$ awk 'BEGIN{sprintf("%d %s", 100, "progreport")}' 
$ awk 'BEGIN{print sprintf("%d %s", 100, "progreport")}'
100 progreport

sub(r,replace,str)

strの文字列から正規表現rで表される最初の部分文字列をreplaceで置き換える. 結果はstrに格納されるためstrは参照で無ければならない.また第三引数を省略すると$0が与えられる.

$ awk 'BEGIN{str="programing report";
 sub(/programing/, "Awk", str); print str}'
Awk report
$ awk 'BEGIN{str="programing report";
 sub(/programing/, "Awk &", str); print str}'
Awk programing report
$ awk 'BEGIN{str="programing programing report";
 sub(/programing/, "Awk \\&", str); print str}'
Awk & programing report
$ awk '{sub(/programing/, "Awk"); print}' progreport
Awk report 123.4
Linux vine 4567 knoppix filter
java c 567 awk
hogehoge foofoo

gsub(r,replace,str)

subと違い正規表現rで表される部分文字列全てをreplaceで置き換える.

$ awk 'BEGIN{str="programing programing report";
 gsub(/programing/, "Awk \\&", str); print str}'
Awk & Awk & report

substr(str,start,length)

strの文字列のstart番目の文字からlength文字の部分文字列を返す. 第三引数の省略でstart番目以降全てを結果として返す.

$ awk 'BEGIN{print substr("programingreport", 4, 5)}'
grami
$ awk 'BEGIN{print substr("programingreport", 11)}'
report

tolower(str)

文字列strのアルファベットで大文字の物を全て小文字にする.

$ awk 'BEGIN{print tolower("ProgramingReport.")}'
programingreport.

toupper(str)

文字列strのアルファベットで小文字の物を全て大文字にする.

$ awk 'BEGIN{print toupper("ProgramingReport.")}'
PROGRAMINGREPORT.

systime()

基準地での1970年1月1日0時からの秒数を返す.

$ awk 'BEGIN{print systime()}'
1137087981

strftime(fmt,timestamp)

timestampはsystime()で与えられる値の形式で,fmtのフォーマットに合わせて整形された データを返す.timestampの省略で現在時が使われ,fmtを省略するとデフォルトのフォーマット に変換される.またフォーマットに関してはANSI Cのstrftimeと同じものが使えるようであるので,

$man strftime

や,

$jman strftime

で見ることができる.

$ awk 'BEGIN{print strftime()}'
金  1月 13 02:46:33 JST 2006
$ awk 'BEGIN{print strftime("%a %F %p%l", 1009141340)}'
月 2001-12-24 午前 6
Valid XHTML 1.1! home > コンピュータ > プログラミング >
リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.2.17HTML convert time to 0.038 sec.