awkで変数に値を割り当てる方法

awkで変数に値を割り当てる方法

次のコードがあります。

$ awk -F'[]]|[[]' \
  '$0 ~ /^\[/ && $2 >= "2014-04-07 23:00"    { p=1 }
   $0 ~ /^\[/ && $2 >= "2014-04-08 02:00:01" { p=0 }
                                           p { print $0 }' log

ここでは、ある変数に「2014-04-07」を割り当て、別の変数に「23:00」を割り当てたいと思います。 $ varなどを使用してその値から入力を取得します。ハードコードされたタイムスタンプの代わりに変数を使用できるように上記のコードを変更するのに役立つ人はいますか?

元の質問へのリンクは次のとおりです。2つのタイムスタンプ間のログを抽出する方法

ベストアンサー1

-v次のオプションを使用して変数をパラメータとして渡すことができます。

awk -F'[]]|[[]' -v var1="2014-04-07 23:00" -v var2="2014-04-08 02:00:01" \
  '$0 ~ /^\[/ && $2 >= var1 { p=1 }
   $0 ~ /^\[/ && $2 >= var2 { p=0 }
   p { print $0 }' log

あるいは、ブロックに変数を設定することもできますBEGIN

awk -F'[]]|[[]' \
  'BEGIN{var1="2014-04-07 23:00"; var2="2014-04-08 02:00:01"}
   $0 ~ /^\[/ && $2 >= var1 { p=1 }
   $0 ~ /^\[/ && $2 >= var2 { p=0 }
   p { print $0 }' log

おすすめ記事