GNU/Linux >> Linux の 問題 >  >> Linux

Awkの外部変数?

この質問にはすでに回答があります :8年前に閉鎖。

重複の可能性:
awkでスクリプトパラメータを使用する

スクリプトスニペットが含まれているスクリプトがあります

x=3
awk '$2=$x{print $1}' infile

外部変数はx、

ただし、awkでエラーが発生します

この状況で、awkを正常に実行するにはどうすればよいですか?

ありがとう!

承認された回答:

シェル変数は次のとおりです。シェル 変数 。それをawkに変えたい場合 変数の場合、次のような構文が必要です:

awk -v x="$x" '$2 == x {print $1}' infile

または

awk '$2 == x {print $1}' x="$x" infile

ただし、これらには問題があります。エスケープシーケンスが拡張されます(GNU awkを使用)。 4.2以上、$xの場合 @/で始まります /で終わります 、正規表現タイプの変数として扱われます。

したがって、たとえば、シェル変数に2つの文字が含まれている場合バックスラッシュ およびn 、awk変数には改行が含まれることになります。 文字(およびgawk 4.2以降では、@/foo/が含まれている場合 、awk変数にはfooが含まれます タイプはregexpである 。

別のアプローチ(ただし、POSIX awkまたはnawkが必要です(いくつかの奇妙なユニスでまだ見られる元のawkとは対照的です))は、環境変数を使用することです:

x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile

別のアプローチ(まだ新しいawkを使用)は、awkでARGVアレイを使用することです:

awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
  $2 == x {print $1}' "$x" infile

Linux
  1. Bashスクリプト(I)

  2. `$?`?それは変数ですか?

  3. 4 Awk If ステートメントの例 ( if, if else, if else if, :? )

  1. AWK 対 NAWK 対 GAWK

  2. 新たにマウントされた外付けドライブを chmod し、書き込みアクセスを設定します

  3. 変数の内容を単語で逆にする

  1. awkを使用して文字の頻度を計算します

  2. awkを学ぶための実用的なガイド

  3. bash - 大文字と小文字を区別しない変数のマッチング