# math Mathematical functions that generally only operate on a list of numbers (integers, decimals, bytes) and tables. Currently the following functions are implemented: * `math abs`: Returns absolute values of a list of numbers * `math avg`: Finds the average of a list of numbers or tables * `math ceil`: Applies the ceil function to a list of numbers * [`math eval`](math-eval.md): Evaluates a list of math expressions into numbers * `math floor`: Applies the floor function to a list of numbers * `math max`: Finds the maximum within a list of numbers or tables * `math median`: Finds the median of a list of numbers or tables * `math min`: Finds the minimum within a list of numbers or tables * `math mode`: Finds the most frequent element(s) within a list of numbers or tables * `math round`: Applies the round function to a list of numbers * `math stddev`: Finds the standard deviation of a list of numbers or tables * `math sum`: Finds the sum of a list of numbers or tables * `math product`: Finds the product of a list of numbers or tables * `math variance`: Finds the variance of a list of numbers or tables However, the mathematical functions like `min` and `max` are more permissive and also work on `Dates`. ## Examples To get the average of the file sizes in a directory, simply pipe the size column from the ls command to the average command. ### List of Numbers (Integers, Decimals, Bytes) ```shell > ls # │ name │ type │ size │ modified ────┼────────────────────┼──────┼──────────┼───────────── 0 │ CODE_OF_CONDUCT.md │ File │ 3.4 KB │ 4 days ago 1 │ CONTRIBUTING.md │ File │ 1.3 KB │ 4 days ago 2 │ Cargo.lock │ File │ 106.3 KB │ 6 mins ago 3 │ Cargo.toml │ File │ 4.6 KB │ 3 days ago 4 │ LICENSE │ File │ 1.1 KB │ 4 days ago 5 │ Makefile.toml │ File │ 449 B │ 4 days ago 6 │ README.md │ File │ 16.0 KB │ 6 mins ago 7 │ TODO.md │ File │ 0 B │ 6 mins ago 8 │ assets │ Dir │ 128 B │ 4 days ago 9 │ build.rs │ File │ 78 B │ 4 days ago 10 │ crates │ Dir │ 672 B │ 3 days ago 11 │ debian │ Dir │ 352 B │ 4 days ago 12 │ docker │ Dir │ 288 B │ 4 days ago 13 │ docs │ Dir │ 160 B │ 4 days ago 14 │ features.toml │ File │ 632 B │ 4 days ago 15 │ images │ Dir │ 160 B │ 4 days ago 16 │ justfile │ File │ 234 B │ 3 days ago 17 │ rustfmt.toml │ File │ 16 B │ 4 days ago 18 │ src │ Dir │ 128 B │ 4 days ago 19 │ target │ Dir │ 192 B │ 8 hours ago 20 │ tests │ Dir │ 192 B │ 4 days ago ``` ```shell > ls | get size | math avg ───┬──────── # │ ───┼──────── 0 │ 7.2 KB ───┴──────── ``` ```shell > ls | get size | math min ───┬───── # │ ───┼───── 0 │ 0 B ───┴───── ``` ```shell > ls | get size | math max ───┬────────── # │ ───┼────────── 0 │ 113.6 KB ───┴────────── ``` ```shell > ls | get size | math median ───┬─────── # │ ───┼─────── 0 │ 320 B ───┴─────── ``` ```shell > ls | get size | math sum ───┬────────── # │ ───┼────────── 0 │ 143.6 KB ───┴────────── ``` ```shell > echo [3 3 9 12 12 15] | math mode ───┬──── 0 │ 3 1 │ 12 ───┴──── ``` ```shell > echo [2 3 3 4] | math product 72 ``` ```shell > echo [1 4 6 10 50] | math stddev 18.1372 ``` ```shell > echo [1 4 6 10 50] | math variance 328.96 ``` ```shell > echo [1.5 2.3 -3.1] | math ceil ───┬──── 0 │ 2 1 │ 3 2 │ -3 ───┴──── ``` ```shell > echo [1.5 2.3 -3.1] | math floor ───┬──── 0 │ 1 1 │ 2 2 │ -4 ───┴──── ``` ```shell > echo [1.5 2.3 -3.1] | math round ───┬──── 0 │ 2 1 │ 2 2 │ -3 ───┴──── ``` ```shell > echo [1 -2 -3.0] | math abs ───┬──────── 0 │ 1 1 │ 2 2 │ 3.0000 ───┴──────── ``` ### Dates ```shell > ls | get modified | math min 2020-06-09 17:25:51.798743222 UTC ``` ```shell > ls | get modified | math max 2020-06-14 05:49:59.637449186 UT ``` ### Operations on tables ```shell > pwd | split row / | size ───┬───────┬───────┬───────┬──────────── # │ lines │ words │ chars │ bytes ───┼───────┼───────┼───────┼──────────── 0 │ 0 │ 1 │ 5 │ 5 1 │ 0 │ 1 │ 11 │ 11 2 │ 0 │ 1 │ 11 │ 11 3 │ 0 │ 1 │ 4 │ 4 4 │ 0 │ 2 │ 12 │ 12 5 │ 0 │ 1 │ 7 │ 7 ───┴───────┴───────┴───────┴──────────── ``` ```shell > pwd | split row / | size | math max ────────────┬──── lines │ 0 words │ 2 chars │ 12 bytes │ 12 ────────────┴──── ``` ```shell > pwd | split row / | size | math avg ────────────┬──────── lines │ 0.0000 words │ 1.1666 chars │ 8.3333 bytes │ 8.3333 ────────────┴──────── ``` To get the sum of the characters that make up your present working directory. ```shell > pwd | split row / | size | get chars | math sum 50 ``` ## Errors `math` functions are aggregation functions so empty lists are invalid ```shell > echo [] | math avg error: Error: Unexpected: Cannot perform aggregate math operation on empty data ```