如何用linux脚本parsingjson

我有一个Json输出,我需要在Linux中提取几个参数。

这是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 } ] } 

预期产出:

  Instance id Name cost centre Owner i-1234576 RDS_Machine (us-east-1c) 1234 Jyoti Bhanot 

我想编写一个文件,其中包含实例ID,名称标签,成本中心,所有者等标题。 在那之下,json输出的某些值。 这里给出的输出只是一个例子。

我怎样才能使用sedawk

任何领导表示赞赏。

谢谢

这是一个使用jsawk的示例。 参考: 使用Unix工具解析JSON

建立:

首先从https://github.com/micha/jsawk下载jsawk

 $ curl -L http://github.com/micha/jsawk/raw/master/jsawk > jsawk $ chmod 755 jsawk && mv jsawk ~/bin/ 

您可能要先安装js-devel然后才能使用jsawk。 我使用的是Fedora,所以我做的是:

 $ sudo yum install js-devel 

考试:

我将你的JSON输出示例复制到一个文本文件。 叫它sample.json 。 这里是一个从你的JSON输出示例中获取值的示例:

 $ jsawk 'return this.Instances[0].Monitoring.State' < sample.json disabled $ jsawk 'return this.Instances[0].VpcId' < sample.json vpc-86bab0e4 

对于来自URL的JSON数据,您可以使用curl http://someserver.com/data.json而不是cat

 $ curl http://someserver.com/data.json | jsawk 'return this.Instances[0].VpcId' vpc-86bab0e4 

你可以在你的bash文件中使用这些命令来生成一个包含你想要的字符串/文本的新文件。 您可以从我在这里提供的GitHub链接阅读更多关于jsawk

这是你在找什么?