将linux命令的输出导入mysql表

hgncfbus  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(364)

我正在尝试创建一个googlecloudsql示例的清单,并将其保存在一个单独的mysql数据库中,这样我就可以将它输入到现有的本地清单中。
要获取gcloud示例的列表,我可以运行以下命令:

$> gcloud sql instances list

它将返回类似于:

NAME    DATABASE_VERSION  LOCATION        TIER         ADDRESS         STATUS
inst3   MYSQL_5_7         europe-west4-b  db-f1-micro  xx.xx.xx.xx     RUNNABLE
inst2   MYSQL_5_6         europe-west4-b  db-f1-micro  xx.xx.xx.xx     RUNNABLE
zandra  MYSQL_5_7         europe-west4-c  db-f1-micro  xx.xx.xx.xx     RUNNABLE

在bash脚本中,如果我像这样运行:

$> allinstances=`gcloud sql instances list`

设置一个名为 allinstances ,然后如何将其插入到名为 gcloudinv 我尝试此操作时预期会出现错误:

$> mysql -uuser -ppassword gcloudinv < allinstances

我知道这样做行不通,但我需要在两者之间做些什么来将输出转换成mysql可以使用的格式。
理想情况下,我将覆盖这个基本库存每天。
谢谢

thigvfpy

thigvfpy1#


# just craete table if does not exists query

query="CREATE TABLE IF NOT EXISTS 'gcloud' ( NAME varchar(255), DATABASE_VERSION  varchar(255), LOCATION varchar(255), TIER varchar(255), ADDRESS varchar(255), STATUS varchar(255) ); "

# convert the lines in format `string[spaces]string[spaces] and so on` into a `insert into 'gcloud' ( string , string, and so on );`

query+="$(  gcloud sql instances list | tail -n +2 | while read -r name database_location location tier address status; do echo "insert into 'gcloud' ( '$name', '$database_location', '$location', '$tier', '$address', '$status' );"; done )"

# execute the query

mysql -uuser -ppassword gcloudinv -e "$query"

笔记: tail -n +2 从输入中删除第一行
不要使用``获取命令输出,它已被弃用,不能嵌套。使用 $( .. ) 您可以使用以下字符串将变量的内容导入命令中: mysql -uuser -ppassword gcloudinv <<<"$allinstances" 在删除第一行之后,需要将该行转换为insert mysql语句。

相关问题