Объединение нескольких файлов JSON с удалением повторяющихся объектов по полю

( Конкретный ответ Bash )Bash не имеет концепции исключений. Однако с набором -o errexit (или эквивалентным :набором -e )на самом внешнем уровне неудачная команда приведет к выходу подоболочки с не -нулевым статусом выхода. Если это набор вложенных подоболочек без условий выполнения этих подоболочек, он эффективно «свернет» весь сценарий и завершит работу.

Это может быть сложно при попытке включить фрагменты различного кода bash в более крупный сценарий. Один фрагмент bash может прекрасно работать сам по себе, но при выполнении с errexit (или без errexit )вести себя неожиданным образом.

[192.168.13.16 (f0f5e19e) ~ 22:58:22]# bash -o errexit /tmp/foo
something went wrong
[192.168.13.16 (f0f5e19e) ~ 22:58:31]# bash /tmp/foo
something went wrong
But we got here anyways
[192.168.13.16 (f0f5e19e) ~ 22:58:37]# cat /tmp/foo
#!/bin/bash
stop () {
    echo "${1}"
    exit 1
}

if false; then
    echo "foo"
else
    (
        stop "something went wrong"
    )
    echo "But we got here anyways"
fi
[192.168.13.16 (f0f5e19e) ~ 22:58:40]#
-1
21.05.2020, 15:00
1 ответ

Вы просто используете функцию unique_by()в jq, которая ожидает массив объектов и принимает имя поля в качестве входных данных для удаления дубликатов на

jq -n '[ inputs[] ] | unique_by(."value 1")'

Чтобы добавить поверх моего другого ответа для уникального выбора на основе одного поля и удаления объектов по другому полю, вы можете сделать это ниже. Приведенный ниже код группирует объекты, исключая дубликаты на основе "value 1"и исключая объекты, содержащие "value 6"

.
jq -n '[ [inputs[]] | unique_by(."value 1")[] | select( has("value 6") | not )]  '
3
18.03.2021, 23:34

Теги

Похожие вопросы