シェル変数は次のとおりです: シェル変数。これを awk 変数に変換する場合は、次のような構文が必要です。
awk -v x="$x" "$2 == x {print $1}" infile
または
awk "$2 == x {print $1}" x="$x" infile
ただし、これらには問題があります。エスケープシーケンスが展開されます(GNU awk
4.2以降では、 if $x
は@/
で始まり、/
、それは変数のregexpタイプとして扱われます)。
したがって、たとえば、シェル変数に2文字のバックスラッシュとが含まれている場合n の場合、awk変数には newline 文字が含まれます(gawk 4.2以降では、@/foo/
が含まれている場合、awk変数にはfoo
を含み、タイプはregexp
です。
別のアプローチ(ただし、POSIX awkまたはnawkが必要です(いくつかの奇妙なユニスでまだ見られる元のawkとは対照的に))環境変数を使用することです:
別のアプローチ(まだ新しいawkを使用)は、awkでARGVアレイを使用することです:
awk "BEGIN {x = ARGV[1]; delete ARGV[1]} $2 == x {print $1}" "$x" infile
コメント