100.dathere.com/lessons/2/index.md

3.1 KiB

jupytext kernelspec
text_representation
extension format_name
.md myst
display_name language name
Bash bash bash

Lesson 2: Piping commands

We've been using one command at a time, but what if we want to use multiple?

For example let's say I want to only see what fruits there are and their availability from fruits_extended.csv in a nicely formatted table.

Selecting the columns

Take a brief look at qsv select:

:tags: ["scroll-output"]
qsv select -h

There are several ways to select the columns we want. Let's take a look at the headers first:

:tags: ["scroll-output"]
qsv headers fruits_extended.csv

We only want data within the fruit and availability columns. Let's try selecting the data within those columns:

:tags: ["scroll-output"]
qsv select 1,4 fruits_extended.csv

Great, we got the column data that we're looking for. But how do we run this data through qsv table?

Command redirection

If you're not sure what stdin, stdout, and stderr are then we recommend reading the Command data streams section in the Appendix.

For example let's say we want to display the previous output with qsv table. We can run the following to pipe the output into qsv table:

:tags: ["scroll-output"]
qsv select 1,4 fruits_extended.csv | qsv table

Now we've got what we were looking for!

Notice that the output of the first command qsv select 1,4 fruits_extended.csv was used as the input for qsv table.

Exercise 2: Piping commands example

Binder

Pipe the first and second columns of fruits_extended.csv into qsv table.

After running that pipeline and viewing the output, try adding qsv transpose before qsv table in the pipeline and see what the output looks like.

Here we show the usage text of qsv select for your reference. Solve this exercise using Thebe, Binder or locally.

:tags: ["scroll-output"]
qsv select --help

::::{admonition} Solution :class: dropdown seealso

For the first part, you may run:

qsv select 1,2 fruits_extended.csv | qsv table

The output should be:

fruit       size
apple       medium
banana      medium
strawberry  small
orange      medium
pineapple   large
grape       small
mango       medium
watermelon  large
pear        medium

The second part is adding qsv transpose within the pipeline:

qsv select 1,2 fruits_extended.csv | qsv transpose | qsv table

The output should be:

fruit  apple   banana  strawberry  orange  pineapple  grape  mango   watermelon  pear
size   medium  medium  small       medium  large      small  medium  large       medium

::::