I have a Json output from which I need to extract a few parameters in linux.
我有一个Json输出,我需要在linux中提取一些参数。
This is the json output:
这是json输出:
{
"OwnerId":"121456789127",
"ReservationId":"r-48465168",
"Groups":[
],
"Instances":[
{
"Monitoring":{
"State":"disabled"
},
"PublicDnsName":null,
"RootDeviceType":"ebs",
"State":{
"Code":16,
"Name":"running"
},
"EbsOptimized":false,
"LaunchTime":"2014-03-19T09:16:56.000Z",
"PrivateIpAddress":"10.250.171.248",
"ProductCodes":[
{
"ProductCodeId":"aacglxeowvn5hy8sznltowyqe",
"ProductCodeType":"marketplace"
}
],
"VpcId":"vpc-86bab0e4",
"StateTransitionReason":null,
"InstanceId":"i-1234576",
"ImageId":"ami-b7f6c5de",
"PrivateDnsName":"ip-10-120-134-248.ec2.internal",
"KeyName":"Test_Virginia",
"SecurityGroups":[
{
"GroupName":"Test",
"GroupId":"sg-12345b"
}
],
"ClientToken":"VYeFw1395220615808",
"SubnetId":"subnet-12345314",
"InstanceType":"t1.micro",
"NetworkInterfaces":[
{
"Status":"in-use",
"SourceDestCheck":true,
"VpcId":"vpc-123456e4",
"Description":"Primary network interface",
"NetworkInterfaceId":"eni-3619f31d",
"PrivateIpAddresses":[
{
"Primary":true,
"PrivateIpAddress":"10.120.134.248"
}
],
"Attachment":{
"Status":"attached",
"DeviceIndex":0,
"DeleteOnTermination":true,
"AttachmentId":"eni-attach-9210dee8",
"AttachTime":"2014-03-19T09:16:56.000Z"
},
"Groups":[
{
"GroupName":"Test",
"GroupId":"sg-123456cb"
}
],
"SubnetId":"subnet-31236514",
"OwnerId":"109030037527",
"PrivateIpAddress":"10.120.134.248"
}
],
"SourceDestCheck":true,
"Placement":{
"Tenancy":"default",
"GroupName":null,
"AvailabilityZone":"us-east-1c"
},
"Hypervisor":"xen",
"BlockDeviceMappings":[
{
"DeviceName":"/dev/sda",
"Ebs":{
"Status":"attached",
"DeleteOnTermination":false,
"VolumeId":"vol-37ff097b",
"AttachTime":"2014-03-19T09:17:00.000Z"
}
}
],
"Architecture":"x86_64",
"KernelId":"aki-88aa75e1",
"RootDeviceName":"/dev/sda1",
"VirtualizationType":"paravirtual",
"Tags":[
{
"Value":"Server for testing RDS feature in us-east-1c AZ",
"Key":"Description"
},
{
"Value":"RDS_Machine (us-east-1c)",
"Key":"Name"
},
{
"Value":"1234",
"Key":"Cost.centre"
},
{
"Value":"Jyoti Bhanot",
"Key":"Owner"
}
],
"AmiLaunchIndex":0
}
]
}
Expected output :
预期产量:
Instance id Name cost centre Owner
i-1234576 RDS_Machine (us-east-1c) 1234 Jyoti Bhanot
I want to write a file that contains headings like instance id, tag like name, cost centre, owner. Below that, certain values from the json output. The output here given is just a example.
我想写一个文件,其中包含标题,如实例ID,标签,如名称,成本中心,所有者。在此之下,来自json输出的某些值。这里给出的输出只是一个例子。
How can I do that using sed and awk?
我怎么能用sed和awk做到这一点?
Any lead is appreciated.
任何领导都表示赞赏。
Thanks
谢谢
1 个解决方案
#1
13
Here's a sample using jsawk. Reference: Parsing JSON with Unix tools
这是使用jsawk的示例。参考:使用Unix工具解析JSON
Setup:
建立:
First download jsawk
from https://github.com/micha/jsawk:
首先从https://github.com/micha/jsawk下载jsawk:
$ curl -L http://github.com/micha/jsawk/raw/master/jsawk > jsawk
$ chmod 755 jsawk && mv jsawk ~/bin/
You might want to install js-devel
first before you can use jsawk. I'm using Fedora, so what I did was:
在使用jsawk之前,您可能需要先安装js-devel。我正在使用Fedora,所以我做的是:
$ sudo yum install js-devel
The test:
考试:
I copied your JSON output sample to a text file. Called it sample.json
. Here a sample to get a value from your JSON output sample:
我将您的JSON输出示例复制到文本文件中。叫它sample.json。这是一个从JSON输出示例中获取值的示例:
$ jsawk 'return this.Instances[0].Monitoring.State' < sample.json
disabled
$ jsawk 'return this.Instances[0].VpcId' < sample.json
vpc-86bab0e4
For JSON data from a URL, you can use curl http://someserver.com/data.json
instead of cat
:
对于来自URL的JSON数据,您可以使用curl http://someserver.com/data.json而不是cat:
$ curl http://someserver.com/data.json | jsawk 'return this.Instances[0].VpcId'
vpc-86bab0e4
You can use these commands in your bash
file to generate a new file that contains strings / text that you wanted. You can read more about jsawk
from the GitHub link that I provided here.
您可以在bash文件中使用这些命令来生成包含所需字符串/文本的新文件。您可以从我在这里提供的GitHub链接中阅读有关jsawk的更多信息。
Is this what you were looking for?
这是你在寻找什么?
#1
13
Here's a sample using jsawk. Reference: Parsing JSON with Unix tools
这是使用jsawk的示例。参考:使用Unix工具解析JSON
Setup:
建立:
First download jsawk
from https://github.com/micha/jsawk:
首先从https://github.com/micha/jsawk下载jsawk:
$ curl -L http://github.com/micha/jsawk/raw/master/jsawk > jsawk
$ chmod 755 jsawk && mv jsawk ~/bin/
You might want to install js-devel
first before you can use jsawk. I'm using Fedora, so what I did was:
在使用jsawk之前,您可能需要先安装js-devel。我正在使用Fedora,所以我做的是:
$ sudo yum install js-devel
The test:
考试:
I copied your JSON output sample to a text file. Called it sample.json
. Here a sample to get a value from your JSON output sample:
我将您的JSON输出示例复制到文本文件中。叫它sample.json。这是一个从JSON输出示例中获取值的示例:
$ jsawk 'return this.Instances[0].Monitoring.State' < sample.json
disabled
$ jsawk 'return this.Instances[0].VpcId' < sample.json
vpc-86bab0e4
For JSON data from a URL, you can use curl http://someserver.com/data.json
instead of cat
:
对于来自URL的JSON数据,您可以使用curl http://someserver.com/data.json而不是cat:
$ curl http://someserver.com/data.json | jsawk 'return this.Instances[0].VpcId'
vpc-86bab0e4
You can use these commands in your bash
file to generate a new file that contains strings / text that you wanted. You can read more about jsawk
from the GitHub link that I provided here.
您可以在bash文件中使用这些命令来生成包含所需字符串/文本的新文件。您可以从我在这里提供的GitHub链接中阅读有关jsawk的更多信息。
Is this what you were looking for?
这是你在寻找什么?