Sortowanie i filtrowanie plików: komendy sort
, uniq
, cut
1. Komenda sort
Komenda sort
jest przeznaczona do sortowania linii w pliku tekstowym. Działa z dowolnym formatem tekstu: od zwykłego płaskiego tekstu do CSV. Domyślnie sortuje linie w porządku alfabetycznym. Jednak istnieje masa opcji, które pozwolą ci dokonywać prawdziwych cudów.
Podstawowa składnia
sort [opcje] plik
Prosty przykład
Załóżmy, że mamy plik names.txt
z następującą zawartością:
Charlie
Alice
Bob
David
Możemy go posortować alfabetycznie tak:
sort names.txt
Wynik:
Alice
Bob
Charlie
David
Kluczowe opcje sort
Sortowanie w odwrotnej kolejności
Jeśli chcesz posortować linie w kolejności malejącej, użyj opcji -r
:
sort -r names.txt
Wynik:
David
Charlie
Bob
Alice
Sortowanie numeryczne
Dla liczb sortowanie alfabetyczne może działać niepoprawnie. Na przykład, oto zawartość pliku numbers.txt
:
10
2
5
1
Sortowanie alfabetyczne zwróci:
1
10
2
5
Ale z opcją -n
(sortowanie numeryczne):
sort -n numbers.txt
Wynik będzie poprawny:
1
2
5
10
Odporność na spacje
Czasami linie zawierają spacje na początku lub końcu. Aby sort
się nie mylił, użyj opcji -b
:
sort -b brudny_plik.txt
Przykład
Załóżmy, że mamy dziennik odwiedzin strony internetowej visits.log
:
user2 15
user1 5
user3 30
user4 20
Chcemy posortować użytkowników według liczby odwiedzin (druga kolumna). Robimy to tak:
sort -k2 -n visits.log
Gdzie -k2
oznacza "użyj drugiej kolumny do sortowania". Wynik:
user1 5
user2 15
user4 20
user3 30
2. Komenda uniq
Komenda uniq
usuwa powtarzające się wiersze w pliku. Ale ważne jest, aby pamiętać: działa tylko na kolejnych duplikatach. Oznacza to, że jeśli identyczne linie występują w różnych częściach pliku, najpierw trzeba je posortować.
Podstawowa składnia
uniq [opcje] plik
Prosty przykład
Załóżmy, że mamy plik colors.txt
:
red
green
green
blue
blue
blue
red
Jeśli po prostu użyjemy uniq
:
uniq colors.txt
Wynik będzie:
red
green
blue
red
Usuwanie nieuniknionych duplikatów
Najpierw posortuj plik:
sort colors.txt | uniq
Wynik:
blue
green
red
Kluczowe opcje uniq
Zliczanie powtórzeń
Jeśli chcesz wiedzieć, ile razy każdy wiersz wystąpił, użyj opcji -c
:
sort colors.txt | uniq -c
Wynik:
3 blue
2 green
2 red
Przykład
W pliku access.log
mamy listę adresów IP:
192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1
Chcemy wiedzieć, który IP występował najczęściej:
sort access.log | uniq -c | sort -rn
Wynik:
3 192.168.0.1
1 192.168.0.2
1 192.168.0.3
3. Polecenie cut
Polecenie cut
pozwala na wyciąganie określonych części wierszy, na przykład pojedynczych kolumn w pliku CSV lub zakresów znaków.
Podstawowa składnia
cut [opcje] plik
Prosty przykład
Plik data.csv
:
Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager
Wyciągniemy tylko imiona (pierwsza kolumna):
cut -d',' -f1 data.csv
Wynik:
Alice
Bob
Charlie
Gdzie:
-d','
— separator (przecinek).-f1
— pole (kolumna) do wyciągnięcia.
Kluczowe opcje cut
Wybór zakresu znaków
Jeżeli nasz plik data.csv
składa się z kolumn o stałej szerokości:
Alice 25 Developer
Bob 30 Designer
Charlie 22 Manager
Możemy wyciągnąć jedynie wiek (znaki od 12 do 14):
cut -c12-14 data.csv
Wynik:
25
30
22
Wybór wielu pól
Jeśli mamy plik log.csv
:
2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped
Wybierzmy tylko datę i poziom logów (pola 1 i 2):
cut -d',' -f1,2 log.csv
Wynik:
2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO
4. Przykład praktyczny: Łączenie sort
, uniq
i cut
Weźmy plik log z takimi danymi:
user1,192.168.0.1
user2,192.168.0.2
user1,192.168.0.1
user3,192.168.0.3
user2,192.168.0.2
- Wyciągniemy adresy IP:
cut -d',' -f2 log.txt
- Usuńmy duplikaty i policzmy je:
cut -d',' -f2 log.txt | sort | uniq -c
- Posortujmy według liczby wystąpień:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn
Wynik:
2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
GO TO FULL VERSION