group-by для фильтров
Сигнатура
> group-by {flags} ...rest
Флаги
-
--to-table: Возвращает таблицу со столбцами "groups" и "items". -
--prune: Удаляет столбец после группировки, если применимо.
Параметры
-
...rest: Путь к столбцу, по которому выполняется группировка.
Типы входных и выходных данных:
| входные данные | выходные данные |
|---|---|
| list<any> | any |
Примеры
Сгруппируйте элементы по значениям столбца "type".
> ls | group-by type
Сгруппируйте элементы по значениям столбца "foo", игнорируя записи без столбца "foo".
> open cool.json | group-by foo?
Выполните группировку с помощью блока, который вычисляется для каждого входного значения.
> [foo.txt bar.csv baz.txt] | group-by { path parse | get extension }
╭─────┬─────────────────╮
│ │ ╭───┬─────────╮ │
│ txt │ │ 0 │ foo.txt │ │
│ │ │ 1 │ baz.txt │ │
│ │ ╰───┴─────────╯ │
│ │ ╭───┬─────────╮ │
│ csv │ │ 0 │ bar.csv │ │
│ │ ╰───┴─────────╯ │
╰─────┴─────────────────╯
Также можно группировать по исходным значениям, не указывая аргумент.
> ['1' '3' '1' '3' '2' '1' '1'] | group-by ╭───┬───────────╮ │ │ ╭───┬───╮ │ │ 1 │ │ 0 │ 1 │ │ │ │ │ 1 │ 1 │ │ │ │ │ 2 │ 1 │ │ │ │ │ 3 │ 1 │ │ │ │ ╰───┴───╯ │ │ │ ╭───┬───╮ │ │ 3 │ │ 0 │ 3 │ │ │ │ │ 1 │ 3 │ │ │ │ ╰───┴───╯ │ │ │ ╭───┬───╮ │ │ 2 │ │ 0 │ 2 │ │ │ │ ╰───┴───╯ │ ╰───┴───────────╯
Также вместо записи можно вывести таблицу.
> ['1' '3' '1' '3' '2' '1' '1'] | group-by --to-table ╭───┬───────┬───────────╮ │ # │ group │ items │ ├───┼───────┼───────────┤ │ 0 │ 1 │ ╭───┬───╮ │ │ │ │ │ 0 │ 1 │ │ │ │ │ │ 1 │ 1 │ │ │ │ │ │ 2 │ 1 │ │ │ │ │ │ 3 │ 1 │ │ │ │ │ ╰───┴───╯ │ │ 1 │ 3 │ ╭───┬───╮ │ │ │ │ │ 0 │ 3 │ │ │ │ │ │ 1 │ 3 │ │ │ │ │ ╰───┴───╯ │ │ 2 │ 2 │ ╭───┬───╮ │ │ │ │ │ 0 │ 2 │ │ │ │ │ ╰───┴───╯ │ ╰───┴───────┴───────────╯
Сгруппируйте логические значения независимо от того, представлены ли они строками или собственно логическими значениями.
> [true "true" false "false"] | group-by ╭───────┬───────────────╮ │ │ ╭───┬──────╮ │ │ true │ │ 0 │ true │ │ │ │ │ 1 │ true │ │ │ │ ╰───┴──────╯ │ │ │ ╭───┬───────╮ │ │ false │ │ 0 │ false │ │ │ │ │ 1 │ false │ │ │ │ ╰───┴───────╯ │ ╰───────┴───────────────╯
Сгруппируйте элементы по значениям нескольких столбцов.
> [
[name, lang, year];
[andres, rb, "2019"],
[jt, rs, "2019"],
[storm, rs, "2021"]
]
| group-by lang year
╭────┬─────────────────────────────────────────╮
│ │ ╭──────┬──────────────────────────────╮ │
│ rb │ │ │ ╭───┬────────┬──────┬──────╮ │ │
│ │ │ 2019 │ │ # │ name │ lang │ year │ │ │
│ │ │ │ ├───┼────────┼──────┼──────┤ │ │
│ │ │ │ │ 0 │ andres │ rb │ 2019 │ │ │
│ │ │ │ ╰───┴────────┴──────┴──────╯ │ │
│ │ ╰──────┴──────────────────────────────╯ │
│ │ ╭──────┬─────────────────────────────╮ │
│ rs │ │ │ ╭───┬──────┬──────┬──────╮ │ │
│ │ │ 2019 │ │ # │ name │ lang │ year │ │ │
│ │ │ │ ├───┼──────┼──────┼──────┤ │ │
│ │ │ │ │ 0 │ jt │ rs │ 2019 │ │ │
│ │ │ │ ╰───┴──────┴──────┴──────╯ │ │
│ │ │ │ ╭───┬───────┬──────┬──────╮ │ │
│ │ │ 2021 │ │ # │ name │ lang │ year │ │ │
│ │ │ │ ├───┼───────┼──────┼──────┤ │ │
│ │ │ │ │ 0 │ storm │ rs │ 2021 │ │ │
│ │ │ │ ╰───┴───────┴──────┴──────╯ │ │
│ │ ╰──────┴─────────────────────────────╯ │
╰────┴─────────────────────────────────────────╯
Сгруппируйте элементы по значениям нескольких столбцов.
> [
[name, lang, year];
[andres, rb, "2019"],
[jt, rs, "2019"],
[storm, rs, "2021"]
]
| group-by lang year --to-table
╭───┬──────┬──────┬──────────────────────────────╮
│ # │ lang │ year │ items │
├───┼──────┼──────┼──────────────────────────────┤
│ 0 │ rb │ 2019 │ ╭───┬────────┬──────┬──────╮ │
│ │ │ │ │ # │ name │ lang │ year │ │
│ │ │ │ ├───┼────────┼──────┼──────┤ │
│ │ │ │ │ 0 │ andres │ rb │ 2019 │ │
│ │ │ │ ╰───┴────────┴──────┴──────╯ │
│ 1 │ rs │ 2019 │ ╭───┬──────┬──────┬──────╮ │
│ │ │ │ │ # │ name │ lang │ year │ │
│ │ │ │ ├───┼──────┼──────┼──────┤ │
│ │ │ │ │ 0 │ jt │ rs │ 2019 │ │
│ │ │ │ ╰───┴──────┴──────┴──────╯ │
│ 2 │ rs │ 2021 │ ╭───┬───────┬──────┬──────╮ │
│ │ │ │ │ # │ name │ lang │ year │ │
│ │ │ │ ├───┼───────┼──────┼──────┤ │
│ │ │ │ │ 0 │ storm │ rs │ 2021 │ │
│ │ │ │ ╰───┴───────┴──────┴──────╯ │
╰───┴──────┴──────┴──────────────────────────────╯
Сгруппируйте элементы по столбцу и удалите исходный столбец.
> [
[name, lang, year];
[andres, rb, "2019"],
[jt, rs, "2019"],
[storm, rs, "2021"]
]
| group-by lang --prune
╭────┬───────────────────────╮
│ │ ╭───┬────────┬──────╮ │
│ rb │ │ # │ name │ year │ │
│ │ ├───┼────────┼──────┤ │
│ │ │ 0 │ andres │ 2019 │ │
│ │ ╰───┴────────┴──────╯ │
│ │ ╭───┬───────┬──────╮ │
│ rs │ │ # │ name │ year │ │
│ │ ├───┼───────┼──────┤ │
│ │ │ 0 │ jt │ 2019 │ │
│ │ │ 1 │ storm │ 2021 │ │
│ │ ╰───┴───────┴──────╯ │
╰────┴───────────────────────╯
Примечания
Команда group-by делает некоторые предположения: - если входные данные не являются строкой, группировщик преобразует ключ в строку, но значения останутся в исходном формате. Например, для логических значений "true" и true попадут в одну группу (см. пример). - Дата и время форматируются в соответствии с настройками конфигурации. Используйте format date, чтобы изменить формат. - Размер файла форматируется в соответствии с настройками конфигурации. Используйте format filesize, чтобы изменить формат. - Некоторые значения Nushell не поддерживаются, например замыкания.
Copyright © 2019–2026 The Nushell Project DevelopersLicensed under the MIT License.
https://www.nushell.sh/commands/docs/group-by.html