2009年4月23日木曜日

awk No.005(変数で条件指定)

awk は、awk の中で変数を持っていますので、シェル変数の持ち込み方(使い方)に工夫が必要です。-v オプションで -v VAR=${VAR} とする方法とは別に、条件指定(/ で括った場合)でもひと癖あります。

$ VAR1="abc"
$ awk '/$VAR1/ {print}' a.dat
上記のようにすると、$VAR1 という文字列を検索して、変数 VAR1 の内容"abc"で検索をしてくれません。そこで、以下のように記述することで、変数 VAR1 の内容"abc"で検索してくれます。
$ VAR1="abc"
$ awk '/'$VAR1'/ {print}' a.dat
シングルクォートで囲ってあげることで、シェル変数として認識してくれます。

2009年4月7日火曜日

sed でコマンド実行結果を使う

sed でコマンド実行結果を指定する方法です。

sed s/abc/def/g a.txt といった指定をしますが、abc や def にコマンド実行結果を指定する場合、以下のようにします。

sed s/`hostname`/`hostname -f`/g a.txt
これで、hostname コマンドの実行結果(例えば host01)を hostname -f の実行結果(例えば host01.hogehoge.local)に変換してくれます。

`command`という文字列として扱いたい(コマンドとして実行しない)場合は、s から g を、シングルクォート( ' )で囲み、コマンドのバッククォート( ` )の前にバックスラッシュ( \ )を挿入します。
sed 's/abc/\`command\`/g' a.txt