需要从JSON文件中每行提取两个变量,并在单独的后续命令中使用这两个变量中的每一个。
我的脚本到目前为止:
#!/bin/bash
VCTRL_OUT='/tmp/workingfile.json'
old_IFS=$IFS # save the field separator
IFS=$'\n' # new field separator, the end of line
for line in $(cat $VCTRL_OUT)
do
python -c 'import json,sys;obj=json.load($line);print obj["ip_range"]'
done
倒数第二行是错误的,需要知道如何做到这一点。
以下作品:
cat /tmp/workingfile.json | head -n +1 | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["ip_range"]';
但不确定如何在循环的bash脚本中执行相同的操作。
答案 0 :(得分:3)
Python不会是我这种单行的首选,但你可以试试
#!/bin/bash
VCTRL_OUT='/tmp/workingfile.json'
parse_json () {
python -c $'import json,fileinput,operator\nfor line in fileinput.input(): print "%s %s"%operator.itemgetter("ip_range","description")(json.loads(line))' "$1"
}
while IFS= read -r ip_range description; do
# do your thing with ip_range
done < <(parse_json "$VCTRL_OUT")
另一种方法是用jq
替换Python位:
while IFS= read -r ip_range description; do
# ...
done < <( jq -rRc 'fromjson | .ip_range+" "+.description' "$VCTRL_OUT")
另一种替代方法是用Python替换整个bash
脚本,尽管说起来容易做起来难,这取决于bash
脚本实际上在做什么。