Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash jq/yq穿越_Bash_Jq - Fatal编程技术网

Bash jq/yq穿越

Bash jq/yq穿越,bash,jq,Bash,Jq,我有一个类似于下面的数据文件 { "user01": { "name": "User01 Name", "age": "20", "sex": "male", "state": "CA", "zip": "92012" }, &

我有一个类似于下面的数据文件

{
  "user01": {
    "name": "User01 Name",
    "age": "20",
    "sex": "male",
    "state": "CA",
    "zip": "92012"
  },
  "user02": {
    "name": "User02 Name",
    "age": "22",
    "sex": "female"
  },
  "user03": {
    "age": "24",
    "sex": "male",
    "zip": "92412"
  },
  "user04": {
    "name": "User05 Name",
    "age": "30",
    "sex": "female",
    "state": "UT",
    "zip": "96232"
  }
}
我想得到这样的输出

"user01" "name" "User01 Name"
"user01" "age" "20"
"user01" "sex" "male"
"user01" "state" "CA"
"user01" "zip" "92012"
"user02" "name" "User02 Name"
"user02" "age" "22"
"user02" "sex" "female"
"user03" "age" "24"
"user03" "sex" "male"
"user03" "zip" "92412"
"user04" "name" "User05 Name"
"user04" "age" "30"
"user04" "sex" "female"
"user04" "state" "UT"
"user04" "zip" "96232"
我不知道如何保存顶级密钥,在处理每个密钥时打印密钥-值对。谢谢你的帮助

jq -r '
  to_entries[] |                  # replace items with {"key": ..., "value": ...}
    .key as $username |           # store top-level key in $username
    .value |                      # later code operates only on value
    to_entries[] |                # break top-level value into key/value pairs
    ([$username, .key, .value] |  # create list w/ desired output fields
     map(tojson) |                # encode those fields as literal JSON
     join(" "))                   # ...and separate those JSON fields with spaces
'
连接到一条直线上,如下所示:

jq -r 'to_entries[] | .key as $username | .value | to_entries[] | ([$username, .key, .value] | map(tojson) | join(" "))'

还请指出一个更简洁的替代方案,避免使用
$username

jq -r '
  to_entries[] |      # Replace items with {"key":..., "value": ...}
    [.key]+(          # Prepend key to results of next group:
      .value |        #   ...creating that group by starting with the value
      to_entries[] |  #   ...then splitting it further into key/value pairs
      [.key, .value]  #   ...then putting key and value into a list
    ) |
    map(tojson) |     # encode the results of the above as JSON strings
    join(" ")         # ...and then separate those strings with spaces.
'

嘘声,嘶嘶声关于“一行”的要求。堆栈溢出用于“实际的、可回答的”问题。为了简洁而牺牲可读性、可维护性(通常是正确性)在本质上是不实际的。不要求一行程序解决方案,但jq通常用于带管道的命令行。可以在管道中使用代码,而不需要一行程序。