Tryb nocny
Przykładowe operacje na prostych danych w środowisku uniksowym
Poniżej przedstawiliśmy przykładowe zadania wraz z rozwiązaniami, z którymi może spotkać się użytkownik terminala podczas pracy z plikami CSV.
Czym jest plik CSV
Plikiem CSV nazywamy plik tekstowy, zawierający dane ułożone w formie tabelarycznej.
Kolejne kolumny zazwyczaj odzielone są znakiem ;
. Spotyka się również znak tabulatora (\t
) albo przecinek (,
).
txt
ID;Nazwa Dystrybucji;Twórcy;Rok pierwszego wydania;Bazuje na;Strona internetowa
1;Debian;Debian Project;1993;;https://debian.org/
2;Ubuntu;Canonical Inc.;2004;Debian;https://ubuntu.com/
3;Kubuntu;Społeczność Kubuntu;2005;Ubuntu;https://kubuntu.org/
4;Linux Mint;Społeczność Linux Mint;2006;Ubuntu;https://linuxmint.com/
5;OpenMediaVault;Volker Theile;2011;Debian;https://openmediavault.org/
6;Fedora;Fedora Project;2003;;https://getfedora.org/
7;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
ID;Nazwa Dystrybucji;Twórcy;Rok pierwszego wydania;Bazuje na;Strona internetowa
1;Debian;Debian Project;1993;;https://debian.org/
2;Ubuntu;Canonical Inc.;2004;Debian;https://ubuntu.com/
3;Kubuntu;Społeczność Kubuntu;2005;Ubuntu;https://kubuntu.org/
4;Linux Mint;Społeczność Linux Mint;2006;Ubuntu;https://linuxmint.com/
5;OpenMediaVault;Volker Theile;2011;Debian;https://openmediavault.org/
6;Fedora;Fedora Project;2003;;https://getfedora.org/
7;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
Dla poniższych zadań przyjmujemy powyższy przykład danych CSV.
Zakładamy, że do poniższych komend zostały przekazane dane CSV na wejściu (cat dystrybucje.csv | <komenda>
).
Operacje na uproszczonych plikach CSV
Do poniższych komend należy przekazać odpowiednie wejście lub ścieżkę do pliku tekstowego. Ich wyjście można też odpowiednio przekierować (operatory |
, >
, <
).
Część poniższych komend działa tylko w uproszczonych przypadkach. Przy plikach posiadających separatory wewnątrz danych, należy użyć narzędzia awk
.
Ostrzeżenie
Jeżeli w danym pliku CSV znak separatora może pojawić się wewnątrz tekstu w kolumnie, należy użyć narzędzia awk
.
Przykład takiego pliku:
txt
ID,Gatunek drzewa,Wzrost [m]
1,Klon,"14,36"
2,Dąb,"17,2"
ID,Gatunek drzewa,Wzrost [m]
1,Klon,"14,36"
2,Dąb,"17,2"
Jak wyświetlić dane CSV w sposób wyjustowany
bash
column -t -s';'
column -t -s';'
txt
ID Nazwa Dystrybucji Twórcy Rok pierwszego wydania Bazuje na Strona internetowa
1 Debian Debian Project 1993 https://debian.org/
2 Ubuntu Canonical Inc. 2004 Debian https://ubuntu.com/
3 Kubuntu Społeczność Kubuntu 2005 Ubuntu https://kubuntu.org/
4 Linux Mint Społeczność Linux Mint 2006 Ubuntu https://linuxmint.com/
5 OpenMediaVault Volker Theile 2011 Debian https://openmediavault.org/
6 Fedora Fedora Project 2003 https://getfedora.org/
7 Elementary OS elementary, Inc. 2011 Ubuntu https://elementary.io/
ID Nazwa Dystrybucji Twórcy Rok pierwszego wydania Bazuje na Strona internetowa
1 Debian Debian Project 1993 https://debian.org/
2 Ubuntu Canonical Inc. 2004 Debian https://ubuntu.com/
3 Kubuntu Społeczność Kubuntu 2005 Ubuntu https://kubuntu.org/
4 Linux Mint Społeczność Linux Mint 2006 Ubuntu https://linuxmint.com/
5 OpenMediaVault Volker Theile 2011 Debian https://openmediavault.org/
6 Fedora Fedora Project 2003 https://getfedora.org/
7 Elementary OS elementary, Inc. 2011 Ubuntu https://elementary.io/
Jak wyświetlić nagłówek z pliku CSV
bash
head -n 1
head -n 1
txt
ID;Nazwa Dystrybucji;Twórcy;Rok pierwszego wydania;Bazuje na;Strona internetowa
ID;Nazwa Dystrybucji;Twórcy;Rok pierwszego wydania;Bazuje na;Strona internetowa
Jak wyświetlić dane CSV bez nagłówka
bash
tail -n +2
tail -n +2
txt
1;Debian;Debian Project;1993;;https://debian.org/
2;Ubuntu;Canonical Inc.;2004;Debian;https://ubuntu.com/
3;Kubuntu;Społeczność Kubuntu;2005;Ubuntu;https://kubuntu.org/
4;Linux Mint;Społeczność Linux Mint;2006;Ubuntu;https://linuxmint.com/
5;OpenMediaVault;Volker Theile;2011;Debian;https://openmediavault.org/
6;Fedora;Fedora Project;2003;;https://getfedora.org/
7;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
1;Debian;Debian Project;1993;;https://debian.org/
2;Ubuntu;Canonical Inc.;2004;Debian;https://ubuntu.com/
3;Kubuntu;Społeczność Kubuntu;2005;Ubuntu;https://kubuntu.org/
4;Linux Mint;Społeczność Linux Mint;2006;Ubuntu;https://linuxmint.com/
5;OpenMediaVault;Volker Theile;2011;Debian;https://openmediavault.org/
6;Fedora;Fedora Project;2003;;https://getfedora.org/
7;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
Jak wyświetlić dane CSV o określonych wartościach kolumn
Kolumna ID równa 3
bash
grep -E '^3;'
grep -E '^3;'
txt
3;Kubuntu;Społeczność Kubuntu;2005;Ubuntu;https://kubuntu.org/
3;Kubuntu;Społeczność Kubuntu;2005;Ubuntu;https://kubuntu.org/
Dystrybucje których pierwsze wydanie nastąpiło dawniej niż 2000 rok włącznie
bash
grep -E '^([^;]*;){3}(1[0-9]{3}|2000)'
grep -E '^([^;]*;){3}(1[0-9]{3}|2000)'
txt
1;Debian;Debian Project;1993;;https://debian.org/
1;Debian;Debian Project;1993;;https://debian.org/
Linie zawierające pustą kolumnę
bash
grep ';;'
grep ';;'
txt
1;Debian;Debian Project;1993;;https://debian.org/
5;Fedora;Fedora Project;2003;;https://getfedora.org/
1;Debian;Debian Project;1993;;https://debian.org/
5;Fedora;Fedora Project;2003;;https://getfedora.org/
Wyświetl rok pierwszego wydania dystrybucji Ubuntu
bash
cut -d';' -f 2,4 | grep -E '^Ubuntu;' | cut -d';' -f2
cut -d';' -f 2,4 | grep -E '^Ubuntu;' | cut -d';' -f2
txt
2004
2004
Utwórz zestawienie bazowanych dystrybucji. Posortuj malejąco według ilości wystąpień
bash
tail -n +2 | cut -d';' -f 5 | sort | uniq -c | grep -o -E '[0-9]+ .+$' | sort | tac
tail -n +2 | cut -d';' -f 5 | sort | uniq -c | grep -o -E '[0-9]+ .+$' | sort | tac
txt
3 Ubuntu
2 Debian
3 Ubuntu
2 Debian
Jak posortować dane CSV
Posortuj dane według ID na początku linii malejąco. Wynik ogranicz do trzech pierwszych linii
bash
tail -n +2 | sort -n | tac | head -n 3
tail -n +2 | sort -n | tac | head -n 3
txt
6;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
5;Fedora;Fedora Project;2003;;https://getfedora.org/
4;Linux Mint;Społeczność Linux Mint;2006;Ubuntu;https://linuxmint.com/
6;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
5;Fedora;Fedora Project;2003;;https://getfedora.org/
4;Linux Mint;Społeczność Linux Mint;2006;Ubuntu;https://linuxmint.com/
Wyświetl dane dwóch najnowszych dystrybucji w kolejności alfabetycznej od jej nazwy
Posortujemy dane według czwartej kolumny przechowującej rok pierwszego wydania, a jeżeli się powtarzają, według drugiej kolumny zawierającej nazwę. Wynik ograniczymy do dwóch linii.
bash
tail -n +2 | sort -t';' -k4,4 -k2,2 | tail -n 2
tail -n +2 | sort -t';' -k4,4 -k2,2 | tail -n 2
txt
7;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
5;OpenMediaVault;Volker Theile;2011;Debian;https://openmediavault.org/
7;Elementary OS;elementary, Inc.;2011;Ubuntu;https://elementary.io/
5;OpenMediaVault;Volker Theile;2011;Debian;https://openmediavault.org/