मैं इस क्वेरी को zsh के साथ चला रहा हूं:

output=$(aws sagemaker describe-training-job \
    --training-job-name $name \
    --query '{S3ModelArtifacts:ModelArtifacts.S3ModelArtifacts,TrainingImage:AlgorithmSpecification.TrainingImage,RoleArn:RoleArn}')

लेकिन मेरे जीवन के लिए मैं व्यक्तिगत रूप से S3ModelArtifacts, TrainingImage, और RoleArn को नहीं निकाल सकता।

ऐसा लगता है कि न तो एक सरणी और न ही एक सहयोगी सरणी है? लेकिन ऐसा लगता है कि जब मैं echo $output करता हूं तो यह जेसन प्रारूप है।

अंतत: मैं सिर्फ var=${output[TrainingImage]} जैसा कुछ करने में सक्षम होना चाहता हूं, लेकिन यह मुझे सिर्फ ट्रेनिंगइमेज वैल्यू के बजाय पूरी प्रतिक्रिया देता है।

किसी भी मदद की सराहना की।

0
Frankie 27 नवम्बर 2019, 05:47

1 उत्तर

सबसे बढ़िया उत्तर

आप कमांड लाइन टूल jq का उपयोग इस तरह से जोंस आउटपुट को पार्स करने के लिए कर सकते हैं:

(19-11-27 10:25:38) <0> [~] printf %s "$output" | jq '.TrainingImage'
"123456789877.dkr.ecr.eu-west-1.amazonaws.com/kmeans:1"

या, चूंकि यह एक बहुत ही सरल क्वेरी है, आप sed का उपयोग कर सकते हैं :

(19-11-27 10:25:43) <0> [~] printf %s "$output" | sed -n -e 's/^.*TrainingImage"://p'
 "123456789877.dkr.ecr.eu-west-1.amazonaws.com/kmeans:1",

यह रहा स्पष्टीकरण सेड कमांड का।

1
nbalas 27 नवम्बर 2019, 13:32