5

コマンドを実行すると、次のような応答が返されます

{

    "status": "available",
    "managed": true,
    "name":vdisk7,
    "support":{
    "status": "supported"
    },
    "storage_pool": "pfm9253_pfm9254_new",
    "id": "ff10abad"-2bf-4ef3-9038-9ae7f18ea77c",
    "size":100
},

何百ものこの種のリストや辞書があるので、そのようなことを行うコマンドが必要です

if name = "something", 
    get the id

そのような種類のコマンドを学習するのに役立つリンクは非常に高く評価されます

私が試してみました

awk '{if ($2 == "何か") print $0;}'

しかし、応答はJsonにあると思うので、列ごとのawkフォーマットが機能していません。

また、実行する必要があるのは 1 つのコマンドにすぎないため、外部ライブラリを使用しないことをお勧めします。

4

1 に答える 1

14

このタスクには JSON パーサーの方が適しています

awksed行指向のテキストを解析するユーティリティですが、json は解析しません。json のフォーマットが変更されるとどうなりますか? (一部の行は1行になりますか?)。

そこにある標準のjsonパーサーを使用する必要があります。または、PHP、Python、Ruby などの強力なスクリプト言語を使用します。

Pythonでそれを行う方法の例を提供できます。

強力なスクリプト言語を使用できない場合はどうすればよいですか?

Python をまったく使用できない場合は、そこにユーティリティjqがあります:リンク

最近のディストリビューションがある場合は、jqすでにリポジトリにある可能性があります (例: Ubuntu 13.10 にはリポジトリがあります)。

パイソン使える!

私は単純な python インライン スクリプトを使用してそれを行います。

たとえばsome_command、結果として json を返すものがあります。

の値を取得する必要がありdata["name"]ます。

どうぞ:

some_command | python -c "import json, sys; print json.load(sys.stdin)['name']"

vdisk7あなたの場合は出力されます

これが機能するには、json が完全に有効であることを確認する必要があります。

json オブジェクトのリストがある場合:

[
  {
    ...
    "name": "vdisk17"
    ...
  },
  {
    ...
    "name": "vdisk18"
    ...
  },
  {
    ...
    "name": "vdisk19"
    ...
  },
...
]

いくつかのリスト内包表記を使用できます。

some_command | python -c "import json, sys; [sys.stdout.write(x['name'] + '\n') for x in json.load(sys.stdin)]"

次のように出力されます。

vdisk17
vdisk18
vdisk19
于 2013-10-22T07:44:20.900 に答える