有什么办法可以在awk代码块中修改shell变量?
--------- [shell_awk.sh]---------------------
#!/bin/bash
shell_variable_1=<value A>
shell_variable_2=<value B>
shell_variable_3=<value C>
awk 'function A(X)
{ return X+1 }
{ a=A('$shell_variable_1')
b=A('$shell_variable_2')
c=A('$shell_variable_3')
shell_variable_1=a
shell_variable_2=b
shell_variable_3=c
}' FILE.TXT
--------- [shell_awk.sh]---------------------
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的示例,真实的脚本加载了文件并使用函数进行了一些更改,我需要在更改之前将每个值保留为特定变量,这样我就可以将MySQL的before和after值注册到MySQL中。
从参数($ 1,$ 2等)接收到after值。
我已经知道如何从文件中获取值之前的值。
除了shell_variable由awk变量设置之外,其他所有操作都做得很好。从awk块代码外部设置很容易,但是在内部,这可能吗?
我知道我可以在 Go 中对变量使用编译器标志,但是如何对常量执行此操作?
我想在编译时设置一些常量,例如数据库集,如下所示:
package db_info
var Deploy string
const DbType = "mysql"
const DbUser = "my_user"
const Db = "my_db"
const DbPort = "3306"
if Deploy == "staging" {
const DbPassword = "my_pwd_stg"
const DbHost = "db.url.com"
} else if Deploy == "production" {
const DbPassword = "my_pwd_prd"
const DbHost = "db.url.com"
} else {
const DbPassword = "pwd"
const DbHost = "127.0.0.1"
}
Run Code Online (Sandbox Code Playgroud)
如何正确地做到这一点?就像我得到的:
syntax error: non-declaration statement outside function body
Run Code Online (Sandbox Code Playgroud)