where for filters
Signature
> where {flags} (condition)
Parameters
condition: Filter row condition or closure.
Input/output types:
| input | output |
|---|---|
| list<any> | list<any> |
| table | table |
| range | any |
Examples
Filter rows of a table according to a condition
> [{a: 1} {a: 2}] | where a > 1
╭───┬───╮
│ # │ a │
├───┼───┤
│ 0 │ 2 │
╰───┴───╯List only the files in the current directory
> ls | where type == fileList all files in the current directory with sizes greater than 2kb
> ls | where size > 2kbList all files with names that contain "Car"
> ls | where name =~ "Car"List all files that were modified in the last two weeks
> ls | where modified >= (date now) - 2wkFilter items of a list with a row condition
> [1 2 3 4 5] | where $it > 2
╭───┬───╮
│ 0 │ 3 │
│ 1 │ 4 │
│ 2 │ 5 │
╰───┴───╯Filter items of a list with a closure
> [1 2 3 4 5] | where {|x| $x > 2 }
╭───┬───╮
│ 0 │ 3 │
│ 1 │ 4 │
│ 2 │ 5 │
╰───┴───╯Find files whose filenames don't begin with the correct sequential number
> ls | where type == file | sort-by name --natural | enumerate | where {|e| $e.item.name !~ $'^($e.index + 1)' } | get itemFind case-insensitively files called "readme", with a subexpression inside the row condition
> ls | where ($it.name | str downcase) =~ readmeFind case-insensitively files called "readme", with regex only
> ls | where name =~ '(?i)readme'Filter rows of a table according to a stored condition
> let cond = {|x| $x.a > 1}; [{a: 1} {a: 2}] | where $cond
╭───┬───╮
│ # │ a │
├───┼───┤
│ 0 │ 2 │
╰───┴───╯List all numbers above 3, using an existing closure condition
> let a = {$in > 3}; [1, 2, 5, 6] | where $a
╭───┬───╮
│ 0 │ 5 │
│ 1 │ 6 │
╰───┴───╯Notes
A condition is evaluated for each element of the input, and only elements which meet the condition are included in the output.
A condition can be either a "row condition" or a closure. A row condition is a special short-hand syntax to makes accessing fields easier. Each element of the input can be accessed through the $it variable.
On the left hand side of a row condition, any field name is automatically expanded to use $it. For example, where type == dir is equivalent to where $it.type == dir. This expansion does not happen when passing a subexpression or closure to where.
When using a closure, the element is passed as an argument and as pipeline input ($in) to the closure. Unlike row conditions, the $it variable isn't available inside closures.
Row conditions cannot be stored in a variable. To pass a condition with a variable, use a closure instead.