use*_*051 1 bash shell yaml loops
我有一个 config_file.yml 文件:
sample:
sql: "select * from dbname.tableName where sampleDate>='2018-07-20';"
config: {'hosts': [!!python/tuple ['192.162.0.10', 3001]]}
sample2:
sql: "select * from dbname.tableName where sampleDate<='2016-05-25';"
config: {'hosts': [!!python/tuple ['190.160.0.10', 3002]]}
Run Code Online (Sandbox Code Playgroud)
我想使用 shell 脚本遍历它的键值对直到 EOF。基本上我希望能够遍历每个 sql 直到 EOF,并在 shell 循环中执行每个 sql。
尝试查看大量文档,但他们没有足够的信息如何使用 shell 循环遍历 yaml。
任何想法或例子都会非常有帮助......
谢谢!
编辑:
我已经在使用 ->
parse_yaml() {
local prefix=$2
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
awk -F$fs '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {
if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
}
}'
}
# read yaml file
eval $(parse_yaml config_file.yml "")
# access yaml content
echo $sample_sql
Run Code Online (Sandbox Code Playgroud)
我无法理解如何进行迭代。
有什么理由不能使用python?
大多数 linux 发行版都应该预装它,这意味着您不必重新发明轮子!
建立:
pip install pyyaml
Run Code Online (Sandbox Code Playgroud)
那么你的脚本是:
import yaml
f = open('config_file.yml')
yaml_file = yaml.safe_load(f)
for sample in yaml_file:
print yaml_file[sample]["sql"]
Run Code Online (Sandbox Code Playgroud)
跑步:
python <script_name>.py
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5601 次 |
| 最近记录: |