如何在 awk 中使用环境变量

Ank*_*054 4 awk

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

要传递的 ENV 变量:

DB_USER,
DB_PASS,
DB_NAME
Run Code Online (Sandbox Code Playgroud)

下面的代码

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'
Run Code Online (Sandbox Code Playgroud)

Ini*_*ian 6

您可以ENVIRONGNU Awk, 中使用变量

GNU Awkman页面

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"]
 }'
Run Code Online (Sandbox Code Playgroud)

根据需要使用变量db_user,db_passdb_name的主体Awk。通过在 中导入环境变量BEGIN,您不必为输入文件中的每一行都导入一次。