我已经使用以下AWK
脚本来更新settings.py
。
我在Docker安装期间使用,并且我试图传递ENV变量。
要传递的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'
答案 0 :(得分:4)
您可以使用ENVIRON
中的GNU Awk
变量,
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"]
}'
根据需要在db_user
正文中使用变量db_pass
,db_name
和Awk
。通过在BEGIN
中导入环境变量,您不必为输入文件中的每一行导入一次。