Pipes and filters#

ls shows all files and directories at this point.

[1]:
!ls
create-delete.ipynb   grep-find.ipynb       shell-variables.ipynb
dvc.list              index.rst
file-system.ipynb     pipes-filters.ipynb

With *.rst we restrict the results to all files with the suffix .rst:

[2]:
!ls *.rst
index.rst

We can also output only the number of lines, words and characters in these documents:

[3]:
!wc *.rst
      18      48     450 index.rst

Now we write the number of characters in the file length.txt and then output the text with cat:

[4]:
!wc -m *.rst > length.txt
[5]:
!cat length.txt
     450 index.rst

We can also have the files sorted by the number of characters:

[6]:
!sort -n length.txt
     450 index.rst
[7]:
!sort -n length.txt > sorted-length.txt

We can also overwrite the existing file:

[8]:
!sort -n length.txt > length.txt

If we only want to know the total number of characters, i.e. only output the last line, we can do this with tail:

[9]:
!tail -n 1 length.txt

> is used to overwrite a file while >> is used to append to a file.

[10]:
!echo amount of characters >> length.txt
[11]:
!cat length.txt
amount of characters

Pipe |#

You can connect commands with a pipe (|). In the following one-liner, we want to display the number of characters for the shortest file:

[12]:
!wc -l *.rst | sort -n | head
      18 index.rst

If we want to display the first lines of the main text (without the first three lines for the title):

[13]:
!cat index.rst | head -n 5 | tail -n 2
Any command on the command line will also work in Jupyter Notebooks if prefixed
with ``!``. The results can then interact with the Jupyter namespace, see