Spec-Zone.ru › Nushell

interleave для фильтров

Читать несколько потоков параллельно и объединять их в один поток.

Сигнатура

> interleave {flags} ...rest

Флаги

  • --buffer-size, -b {int}: Количество элементов для буферизации из потоков. Увеличивает потребление памяти, но может повысить производительность при большом объёме вывода.

Параметры

  • ...rest: Замыкания, которые будут создавать объединяемые потоки.

Типы входных и выходных данных:

вход выход
list<any> list<any>
nothing list<any>

Примеры

Считать две последовательности чисел в отдельные столбцы таблицы. Обратите внимание, что порядок строк со столбцами 'a' и строк со столбцами 'b' произвольный.

> seq 1 50 | wrap a | interleave { seq 1 50 | wrap b }

Считать две последовательности чисел, одну из входных данных. Отсортировать для единообразия.

> seq 1 3 | interleave { seq 4 6 } | sort
╭───┬───╮
│ 0 │ 1 │
│ 1 │ 2 │
│ 2 │ 3 │
│ 3 │ 4 │
│ 4 │ 5 │
│ 5 │ 6 │
╰───┴───╯

Считать две последовательности без каких-либо входных данных. Отсортировать для единообразия.

> interleave { "foo\nbar\n" | lines } { "baz\nquux\n" | lines } | sort
╭───┬──────╮
│ 0 │ bar  │
│ 1 │ baz  │
│ 2 │ foo  │
│ 3 │ quux │
╰───┴──────╯

Выполнить две команды параллельно и добавить аннотации к их выводу.

> (
interleave
    { nu -c "print hello; print world" | lines | each { "greeter: " ++ $in } }
    { nu -c "print nushell; print rocks" | lines | each { "evangelist: " ++ $in } }
)

Использовать буфер для повышения производительности потоков с большим объёмом данных.

> seq 1 20000 | interleave --buffer-size 16 { seq 1 20000 } | math sum

Примечания

Этот комбинатор удобен для чтения вывода нескольких команд.

Если в interleave переданы входные данные, они будут объединены с выводом замыканий. Это позволяет использовать interleave в любой позиции конвейера.

Поскольку элементы каждого потока будут добавляться в итоговый поток сразу после появления, порядок итогового вывода не гарантируется. Однако порядок элементов из любого отдельного потока гарантированно сохраняется таким же, каким он был в этом потоке.

Если требуется чередовать потоки справедливым образом (по кругу), рассмотрите возможность использования zip { ... } | flatten.

Copyright © 2019–2026 The Nushell Project DevelopersLicensed under the MIT License.
https://www.nushell.sh/commands/docs/interleave.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API