Определить файлы .json с пустыми массивами?

Это не ответ, а предложение о том, как вы могли бы найти ответ.

Попробуйте запустить xev , Вы должны убедиться, что прокрутка вверх / вниз в окне xev приводит к созданию журналов с помощью кнопок мыши 4 и 5, например:

ButtonRelease event, serial 46, synthetic NO, window 0x4000001,
    root 0xc4, subw 0x0, time 169151426, (78,60), root:(142,831),
    state 0x800, button 4, same_screen YES

ButtonPress event, serial 46, synthetic NO, window 0x4000001,
    root 0xc4, subw 0x0, time 169151506, (78,60), root:(142,831),
    state 0x0, button 5, same_screen YES

Если это не так, это может быть проблема конфигурации X, т.е. ваши входы прокрутки мыши каким-то образом отображаются на некоторые другие ключевые события. Но я думаю, что в первую очередь стоит поискать конфигурацию i3. Я предполагаю, что переключение рабочего стола будет функцией, и поэтому может быть вариант, когда он привязан к ключу (-ам) в конфигурации.

В основном; выяснить, какие события производят прокрутки мыши, а затем выполнить для них grep-конфиги.

1
04.05.2018, 22:19
2 ответа

Jqбудет подходящим инструментом для обработки/анализа JSON данных:

for f in *.json; do
    if jq -e 'keys_unsorted as $keys
              | ($keys | length == 1) 
                and.[($keys[0])] == []' "$f" > /dev/null; then
        mv "$f" error_dir/
    fi
done
4
27.01.2020, 23:18
mkdir -p error_folder &&
for json in./*.json; do
    if jq -e '.. | select(type == "array" and length == 0)' "$json" >/dev/null
    then
        mv "$json" error_folder/
    fi
done

Это более или менее тот же подход, который использовал Роман в своем ответе , но использует другое jqвыражение.

Выражение ..|select(type == "array" and length == 0)рекурсивно рекурсирует полную структуру JSON и выберет все ее биты, которые являются массивами нулевой -длины (в любом месте, на любой глубине ).

Если select()выполнено успешно, то jqзавершится с нулевым статусом выхода (успех ), что означает, что документ JSON содержит где-то пустой массив (или файл полностью пуст ). Это инициирует перемещение документа в error_folderв сценарии.


Из комментариев ниже видно, что пользователя интересует только массив WarehouseActivity.

Мой код с измененным jqвыражением:

mkdir -p error_folder &&
for json in./*.json; do
    if jq -e '.. |.WarehouseActivity? | select(type == "array" and length == 0)' "$json" >/dev/null
    then
        mv "$json" error_folder/
    fi
done
6
27.01.2020, 23:18

Теги

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