この質問にはすでに回答があります :8年前に閉鎖。
Linux
重複の可能性:
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