shell

awkでシェル変数を使う

awkでシェル変数を使う方法です。
普通にシェル変数を指定するとawkは理解してくれません。

$ awk '{print $HOME}'
aaa
awk: illegal field $(), name "HOME"
input record number 1, file
source line number 1
$

シングルクォーテーションの位置を工夫するとシェル変数を使うことができます。

$ awk '{print "'$HOME'/" $1}'
aaa
/Users/ksaito/aaa
tmp
/Users/ksaito/tmp
^C
$ 

コメント

  1. Rocco より:

    コマンドラインで Shell 変数を AWK に渡すのは面倒ですよね。そこで、AWK のコマンドラインオプションの -v を使うと Shell 変数を AWK 変数に渡すことができます。

    $ awk -v HOME=${HOME} 'BEGIN{print HOME}'

    または、GNU AWK (gawk) などであれば、配列 ENVIRON から環境変数を受け取れます。

    $ gawk 'BEGIN{print ENVIRON["HOME"]}'

    ご参考まで。

  2. ksaito11 より:

    Roccoさん
    おお!これは、いいですね。
    "や'の入れ子でややこしいので何とかならないものかと思っていました。
    勉強になりました!!

タイトルとURLをコピーしました