Skip to content

Commit

Permalink
feat: update lesson 2 and add appendix entry
Browse files Browse the repository at this point in the history
  • Loading branch information
rzmk committed Sep 12, 2024
1 parent aed3dad commit 896e0c5
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 12 deletions.
22 changes: 22 additions & 0 deletions appendix.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,25 @@ A mapping of qsv release files for an arbitrary version X.Y.Z and platforms they
:::{note}
The listed OS/architecture are primarily based on [information from "The rustc book"](https://doc.rust-lang.org/nightly/rustc/platform-support.html).
:::

(command-data-streams)=
## Command data streams (`stdin`, `stdout`, and `stderr`)

The terms `stdin`, `stdout`, and `stderr` may commonly be found within qsv's source code and in the lessons.

Here's a very brief explanation of what each means in the context of a command:

- `stdin` ("Standard input"): Input data
- `stdout` ("Standard out"): Output data
- `stderr` ("Standard error"): Error output

Let's consider the following pipeline as an example:

```bash
qsv clipboard | qsv stats -E
```

- There are two commands ran here, each separated by a pipe (`|`).
- The output (`stdout`) of `qsv clipboard` is used as the input (`stdin`) of `qsv stats -E`.

For further explanation you may read online articles regarding piping commands. You may view a few more examples [here](https://zerotomastery.io/cheatsheets/linux-commands-cheat-sheet/#piping-and-command-redirection).
52 changes: 52 additions & 0 deletions lessons/2/exercise.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercise 2: Piping commands\n",
"\n",
"Pipe the first and second columns of `fruits_extended.csv` into `qsv table`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"qsv select --help"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Bash",
"language": "bash",
"name": "bash"
},
"language_info": {
"name": "bash"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
67 changes: 55 additions & 12 deletions lessons/2/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,6 @@ kernelspec:

# Lesson 2: Piping commands

:::{admonition} Lesson is a work in progress
:class: warning

This lesson is not complete. Stay tuned!

:::

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.
Expand Down Expand Up @@ -49,7 +42,7 @@ Great, we got the column data that we're looking for. But how do we run this dat

## Command redirection

If you're not sure what `stdin`, `stdout`, and `stderr` are then we recommend reading the "Command data streams (`stdin`, `stdout`, and `stderr`)" section in the Appendix.
If you're not sure what `stdin`, `stdout`, and `stderr` are then we recommend reading the [Command data streams](command-data-streams) section in the Appendix.

<!-- Add link to appendix or do a dropdown or continue lesson and explain each one. -->
<!-- Improve flow for previous sentence to next one or modify flow. -->
Expand All @@ -63,9 +56,59 @@ qsv select 1,4 fruits_extended.csv | qsv table

Now we've got what we were looking for!

:::{admonition} Exercise is a work in progress
:class: important
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](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/dathere/100.dathere.com/main?labpath=lessons%2F2%2Fexercise.ipynb)

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](exercises-setup:thebe), [Binder](exercises-setup:binder) or [locally](exercises-setup:local).
```{code-cell}
:tags: ["scroll-output"]
qsv select --help
```

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

The exercise for this lesson is not available yet. Stay tuned!
For the first part, you may run:

```bash
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:
```bash
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
```
:::
::::

0 comments on commit 896e0c5

Please sign in to comment.