#!/usr/bin/env fq -f def recurse_depth(f; cond): def _r($depth): ( ( . | select(cond) | {depth: $depth, value: .} ) , ( [f] | to_entries[] as $e | $e.value | _r($depth + if cond then 1 else 0 end) ) ); _r(0); [ ( recurse_depth( .[]?; ._format ) | . + { norm_path: (.value._path | map(if type == "number" then "index" end)), } ) ] | chunk_by(.norm_path) | map(.[0] + {count: length}) | .[] | [ if .depth > 0 then " "*.depth else empty end , (.value._format + if .count > 1 then "*\(.count) " else " " end) , (.value._path | path_to_expr) ] | join("") | println