如何在Awk中使用环境变量

如何在Awk中使用环境变量,awk,Awk,我有以下AWK脚本,用于更新settings.py。 我在Docker安装过程中使用了,我正在尝试传递ENV变量 要传递的环境变量: DB_USER, DB_PASS, DB_NAME 下面的代码 awk 'function pr(sp, k, v){ # prints key-value pair with indentation printf "%s\047%s\047: \047%s\047,\n",sp,k,v; } /sqlite/{ s

我有以下
AWK
脚本,用于更新
settings.py
。 我在Docker安装过程中使用了,我正在尝试传递ENV变量

要传递的环境变量:

DB_USER,
DB_PASS,
DB_NAME
下面的代码

awk 'function pr(sp, k, v){    # prints key-value pair with indentation
         printf "%s\047%s\047: \047%s\047,\n",sp,k,v; 
     }
     /sqlite/{ sub(/sqlite[0-9]*/,"mysql",$0) }
     /NAME/{ sp=substr($0,1,index($0,"\047")-1); 
             print sp$1" \047$DB_NAME\047"; 
             pr(sp,"USER","$DB_USER"); pr(sp,"PASSWORD","$DB_PASS"); 
             pr(sp,"HOST","localhost"); pr(sp,"PORT",""); next 
     }1'

您可以在
GNU Awk
中使用
ENVIRON
变量

ENVIRON

包含环境值的关联数组。数组索引是环境变量名;元素是特定环境变量的值。例如,
ENVIRON[“HOME”]
可能是
“/HOME/arnold”
。更改此数组不会影响传递给任何程序的环境,
awk
可能通过重定向或
system()
函数生成。(在未来版本的
gawk
中,它可能会这样做。)

使用上面的数组引用环境变量,只需在
BEGIN
子句中执行此操作,即可加载所有变量并在以后使用

awk 'BEGIN {
    db_user = ENVIRON["DB_USER"]
    db_pass = ENVIRON["DB_PASS"]
    db_name = ENVIRON["DB_NAME"]
 }'
根据需要使用
Awk
正文中的变量
db\u user
db\u pass
db\u name
。通过在
BEGIN
中导入环境变量,您不必为输入文件中的每一行导入一次环境变量