2009年3月15日日曜日

awk No.001(基本的な使い方と変数の使い方)

awk は便利です。今更ですが。

sed をもっと高機能にしたものとも言えますが、実際はデータの置き換えというよりも、データの抽出、整形に特化しているコマンドだと思います。

ファイルを順に読んでいき処理をしてくれるわけですが、基本的な使い方は以下の通り。

awk '条件{処理}' filename
条件には、処理対象とする行の条件を指定します。処理は文字通り、処理です。print $1 等と指定すれば処理対象の1列目のデータを表示します。

スクリプト内で、$1 等を変数として使いたい場合は、以下のようにします。
[OK]
# cat a.txt
abc 0 1 2
def 0 1 2
ghi 0 1 2
jkl 0 1 2

NUM="1"
awk -v NUM=${NUM} '{print $NUM}' a.txt

実行結果
abc
def
ghi
jkl
-v オプションで NUM という awk 内の変数に、シェルスクリプト内の変数を代入して、awk 内の変数 NUM として使います。

以下のような指定では、思った結果は得られません。NUM は"$1"という文字列が代入された awk 内の変数として扱われ、$1 が結果として表示されてしまいます。
[NG]
# cat a.txt
abc 0 1 2
def 0 1 2
ghi 0 1 2
jkl 0 1 2

NUM="$1"
awk -v NUM=${NUM} '{print NUM}' a.txt

実行結果
$1
$1
$1
$1

0 件のコメント: