Section Next | Prev


4.2.3 式と演算

文字列処理を中心とした関数や算術関数も多く提供されていて、function により ユーザが関数を定義することもできます。

型なしデータ
他の言語と違い awk のデータ型は、明確に区別されません。演算子によって随時 矛盾ないよう数値と文字が変換されます。
	$ cat a.awk
	#! /bin/awk -f
	BEGIN{
		a="123" 	# 文字列として 123 を代入
		print a
		b=a+2		# 数値に変換し、2を加算
		print b
		c=b"+123"	# 再び文字列として連結
		print c
	}

	$ a.awk /dev/null
	123
	125
	125+123
配列
多くのプログラミング言語同様、配列変数を使うことができます。
特に宣言は必要なく変数に括弧が付けば配列として扱われます。
配列の例
	$  cat /etc/resolv.conf
	nameserver 172.19.0.1
	nameserver 172.19.0.117

	$ awk '{line[NR]=$0}END{for(i=NR;i>0;i--)print line[i]}' /etc/resolv.conf
	nameserver 172.19.0.117
	nameserver 172.19.0.1
連想配列
連想配列が利用できるため柔軟なデータ構造が作成できます。 連想配列は SNOBOL 系言語で実装されたデータ構造で、awk では配列の添字に 数値ではなく文字列を利用するような形式になっています。
	$ awk 'END{a["ichi"]=1;a["ni"]=2; print a["ichi"]}' /dev/null
	1
for .. in 文により配列全体を読みだす場合にはその添字部分のみが返される。 (perl では添字、要素のペアが返される。)
簡単な例 a.awk:
	END{
		a["a"] = "abc";
	 	a["b"] = "123";

	 	for ( n in a ) {
	 		printf "-%s\n", a[n]
	 	}

	 	for ( n in a ) {
	 		printf "+%s", n
	 	}

	}

$ awk -f a.awk /dev/null
	-abc
	-123
	+a
	+b

Section Next | Prev