diff --git a/src/util/reduce-merge-deep-add.sh b/src/util/reduce-merge-deep-add.sh new file mode 100755 index 0000000..7be3800 --- /dev/null +++ b/src/util/reduce-merge-deep-add.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -e + +read -d '' reduceMerge <<-'EOF' || true +def deepAdd(item): + item as $item + | with_entries( + ($item[.key]) as $other + | if (.value | type) == "number" and ($other | type) == "number" then + .value += $other + else + .value |= deepAdd($other) + end + ); + +reduce .[1:][] as $halfway +( + .[0]; + deepAdd($halfway) +) +EOF + +cat | jq --slurp "$reduceMerge"