将 shell 脚本变量传递到 AWK 命令

将 shell 脚本变量传递到 AWK 命令

我希望能够调用一个继续执行以下命令的 shell 脚本。

awk -F $'\xE7' '{OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0 }' > outputfile

但我希望能够将一个 shell 脚本变量传递到这个命令中,用于替换$3AWK 命令中的变量。

如何将 shell 脚本变量传递到这个 AWK 命令?

答案1

单引号会阻止扩展。请将其切换。

awk ... '...'"$foo"'...' ...

答案2

正确的做法是使用 AWK 的变量传递功能。另外,您可能只需要设置OFS一次,因此应该在子句中设置BEGIN

awk -F $'\xE7' -v awkvar="$shellvar" 'BEGIN {OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile

您还可以使用-v来设置OFS

awk -F $'\xE7' -v awkvar="$shellvar" -v OFS ="¬" '{ $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile

我只是将变量添加到print语句中,因为我不知道您想如何使用它。

答案3

awk 具有ENVIRON用于访问环境的数组:

$ FOO=bar awk 'BEGIN{print ENVIRON["FOO"]}'
bar

相关内容