<commit_before># json-grep

Быстрая реализация аналога утилиты `grep` для файлов, где каждая строка содержит
ровно один JSON-объект, например

```
% cat log.json
```

```
{"ts":1396141317.4536, "type":"earn", "amount":500, "user":{"id":1, "country":"RU"}}
{"ts":1396141317.6861, "type":"spent", "amount":100, "user":{"id":2, "country":"UA"}}
{"ts":1396141318.5441, "type":"earn", "amount":50, "user":{"id":3, "country":"US", "ref": "fb"}}
{"ts":1396141319.7414, "type":"earn", "amount":10, "user":{"id":4, "country":"RU"}}
```

## Фильтры

на данный момент поддерживаются 2 вида фильтрации: по точному совпадению значения
указанного поля и по существованию поля.

### Точное совпадение

Первый уровень пложенности

```
% cat log.json | jzon-grep type=earn
```

```
{"ts":1396141317.4536, "type":"earn", "amount":500, "user":{"id":1, "country":"RU"}}
{"ts":1396141318.5441, "type":"earn", "amount":50, "user":{"id":3, "country":"US", "ref": "fb"}}
{"ts":1396141319.7414, "type":"earn", "amount":10, "user":{"id":4, "country":"RU"}}
```

Второй уровень вложенности

```
% cat log.json | jzon-grep user.country=RU
```

```
{"ts":1396141317.4536, "type":"earn", "amount":500, "user":{"id":1, "country":"RU"}}
{"ts":1396141319.7414, "type":"earn", "amount":10, "user":{"id":4, "country":"RU"}}
```

### Существование поля

```
% cat log.json | jzon-grep user.ref
```

```
{"ts":1396141318.5441, "type":"earn", "amount":50, "user":{"id":3, "country":"US", "ref": "fb"}}
```

### Учёт значений произвольных полей

Если поле, по которому нужно фильтровать объекты неизвестно, но известно его значение,
то можно воспользоваться специальным символом `'*'` для обозначения любого поля. Вложенность<commit_msg>Опечатки опечаточки<commit_after># json-grep

Быстрая реализация аналога утилиты `grep` для файлов, где каждая строка содержит
ровно один JSON-объект, например

```
% cat log.json
```

```
{"ts":1396141317.4536, "type":"earn", "amount":500, "user":{"id":1, "country":"RU"}}
{"ts":1396141317.6861, "type":"spent", "amount":100, "user":{"id":2, "country":"UA"}}
{"ts":1396141318.5441, "type":"earn", "amount":50, "user":{"id":3, "country":"US", "ref": "fb"}}
{"ts":1396141319.7414, "type":"earn", "amount":10, "user":{"id":4, "country":"RU"}}
```

## Фильтры

на данный момент поддерживаются 2 вида фильтрации: по точному совпадению значения
указанного поля и по существованию поля.

### Точное совпадение

Первый уровень пложенности

```
% cat log.json | json-grep type=earn
```

```
{"ts":1396141317.4536, "type":"earn", "amount":500, "user":{"id":1, "country":"RU"}}
{"ts":1396141318.5441, "type":"earn", "amount":50, "user":{"id":3, "country":"US", "ref": "fb"}}
{"ts":1396141319.7414, "type":"earn", "amount":10, "user":{"id":4, "country":"RU"}}
```

Второй уровень вложенности

```
% cat log.json | json-grep user.country=RU
```

```
{"ts":1396141317.4536, "type":"earn", "amount":500, "user":{"id":1, "country":"RU"}}
{"ts":1396141319.7414, "type":"earn", "amount":10, "user":{"id":4, "country":"RU"}}
```

### Существование поля

```
% cat log.json | json-grep user.ref
```

```
{"ts":1396141318.5441, "type":"earn", "amount":50, "user":{"id":3, "country":"US", "ref": "fb"}}
```

### Учёт значений произвольных полей

Если поле, по которому нужно фильтровать объекты, неизвестно, а известно только его значение,
то можно воспользоваться специальным символом `'*'` для обозначения любого поля. Вложенность
{'fraction_non_alphanumeric': 0.25022000586682314, 'fraction_numerical': 0.1026694045174538, 'mean_word_length': 7.138424821002387, 'pattern_counts': {'":': 126, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3646851', 'n_tokens_mistral': 1688, 'n_tokens_neox': 1572, 'n_words': 283}