Gym
lesson

Sortiranje i filtriranje

Cilj lekcije: Naučiti kako da koristite sort, uniq, cut, tr i paste za efikasnu obradu tekstualnih podataka u terminalu.


sort — sortiranje linija

Komanda sort sortira linije tekstualnog fajla ili standardnog ulaza.

Abecedno sortiranje (podrazumevano)

sort gradovi.txt

Ako gradovi.txt sadrži:

Novi Sad
Beograd
Niš
Kragujevac

Rezultat:

Beograd
Kragujevac
Niš
Novi Sad

Numeričko sortiranje — opcija -n

Bez -n, brojevi se sortiraju kao tekst (leksikografski — slovo po slovo, kao u recniku: ABC vs ABD), što daje pogrešan redosled:

# Pogrešno — leksikografski
echo -e "10
2
100
20" | sort
# Izlaz: 10 100 2 20
# Ispravno — numerički
echo -e "10
2
100
20" | sort -n
# Izlaz: 2 10 20 100

Obrnuto sortiranje — opcija -r

sort -n -r rezultati.txt

Kombinovanje -n i -r daje numeričko sortiranje od najvećeg ka najmanjem.

Sortiranje po koloni — opcija -k

Kada fajl ima više kolona, možete sortirati po određenoj koloni:

# Sortiranje po drugoj koloni
sort -k2 zaposleni.txt

Primer sadržaja zaposleni.txt:

Ana      Petrović  35
Marko    Jovanović 28
Milica   Nikolić   42
# Sortiranje po trećoj koloni (starost), numerički, obrnuto
sort -k3 -n -r zaposleni.txt

Rezultat:

Milica   Nikolić   42
Ana      Petrović  35
Marko    Jovanović 28

Separator kolona — opcija -t

Za CSV fajlove ili podatke sa posebnim separatorom, koristite -t:

# Sortiranje CSV fajla po drugoj koloni (cena)
sort -t',' -k2 -n proizvodi.csv

Primer proizvodi.csv:

laptop,85000,5
tastatura,3500,20
mis,1200,50
monitor,45000,8

Rezultat (sortirano po ceni):

mis,1200,50
tastatura,3500,20
monitor,45000,8
laptop,85000,5

Uklanjanje duplikata pri sortiranju — opcija -u

sort -u gradovi.txt

Sortira i istovremeno uklanja duplikate.


uniq — uklanjanje duplikata

Komanda uniq uklanja uzastopne duplikate iz sortirane liste.

Važno: uniq uklanja samo uzastopne duplikate. Fajl mora biti prethodno sortiran da bi uniq ispravno funkcionisao!

Osnovna upotreba

sort gradovi.txt | uniq

Brojanje pojavljivanja — opcija -c

sort gradovi.txt | uniq -c

Primer izlaza:

      3 Beograd
      1 Kragujevac
      2 Novi Sad

Broj ispred svake linije pokazuje koliko puta se ta vrednost pojavljuje.

Prikazivanje samo duplikata — opcija -d

sort gradovi.txt | uniq -d

Prikazuje samo linije koje se ponavljaju.

Prikazivanje samo unikatnih linija — opcija -u

sort gradovi.txt | uniq -u

Prikazuje samo linije koje se pojavljuju tačno jednom.


cut — izvlačenje kolona

Komanda cut izvlači određene kolone ili karaktere iz svake linije.

Po separatoru — opcija -d i -f

Polje je jedan deo linije razdvojen razdelnikom (delimiter). Na primer, linija marko,beograd,123 ima 3 polja razdvojena zarezom: marko je $1, beograd je $2, 123 je $3.

# Izvuci prvu kolonu iz CSV fajla (separator: zarez)
cut -d',' -f1 proizvodi.csv

Rezultat:

laptop
tastatura
mis
monitor
# Izvuci prvu i treću kolonu
cut -d',' -f1,3 proizvodi.csv

Rezultat:

laptop,5
tastatura,20
mis,50
monitor,8

Opseg kolona

# Kolone od 2 do 4
cut -d',' -f2-4 podaci.csv

# Kolone od 3 do kraja
cut -d',' -f3- podaci.csv

Po broju karaktera — opcija -c

# Prvih 10 karaktera svake linije
cut -c1-10 fajl.txt

# Karakteri od 5 do 15
cut -c5-15 fajl.txt

Praktični primer: izvlačenje korisničkih imena iz /etc/passwd

cut -d':' -f1 /etc/passwd

tr — zamena i brisanje karaktera

Komanda tr (translate) zamenjuje ili briše pojedinačne karaktere.

Zamena karaktera

# Zameni sve male u velika slova
echo "hello world" | tr 'a-z' 'A-Z'
# Izlaz: HELLO WORLD
# Zameni velika u mala slova
echo "LINUX JE ODLICAN" | tr 'A-Z' 'a-z'
# Izlaz: linux je odlican
# Zameni tačku-zarez sa zarezom (konverzija formata)
cat podaci.txt | tr ';' ','

Brisanje karaktera — opcija -d

# Ukloni sve cifre iz teksta
echo "tel: 011-123-456" | tr -d '0-9'
# Izlaz: tel: --

# Ukloni sve razmake
echo "r a z m a k" | tr -d ' '
# Izlaz: razmak

Sazimanje ponavljanja (squeezing) — opcija -s

Sazimanje ponavljanja (squeezing) — vise uzastopnih istih znakova svodi na jedan:

# Zameni više uzastopnih razmaka jednim
echo "previše     razmaka" | tr -s ' '
# Izlaz: previše razmaka

Praktični primer: normalizacija CSV separatora

# Fajl sa tabulatorima, konvertuj u CSV sa zarezima
cat tabovi.tsv | tr '\t' ','

paste — spajanje fajlova po kolonama

Komanda paste spaja linije iz više fajlova horizontalno (za razliku od cat koji spaja vertikalno).

Osnovna upotreba

Ako imate dva fajla:

imena.txt:

Ana
Marko
Milica

prezimena.txt:

Petrović
Jovanović
Nikolić
paste imena.txt prezimena.txt

Rezultat:

Ana     Petrović
Marko   Jovanović
Milica  Nikolić

Prilagođeni separator — opcija -d

paste -d',' imena.txt prezimena.txt

Rezultat:

Ana,Petrović
Marko,Jovanović
Milica,Nikolić

Spajanje linija iz jednog fajla — opcija -s

paste -s -d',' gradovi.txt

Spaja sve linije jednog fajla u jednu liniju razdvojenu zarezima.


Kombinovanje komandi — pipeline

Prava snaga ovih alata dolazi do izražaja kada se kombinuju.

prodaja.csv:

datum,grad,proizvod,kolicina,cena
2024-01-15,Beograd,laptop,2,85000
2024-01-16,Novi Sad,tastatura,5,3500
2024-01-17,Beograd,mis,10,1200
2024-01-18,Niš,laptop,1,85000
2024-01-19,Beograd,monitor,3,45000
2024-01-20,Novi Sad,laptop,2,85000
# Koji gradovi su kupovali laptop?
grep "laptop" prodaja.csv | cut -d',' -f2 | sort | uniq

Rezultat:

Beograd
Niš
Novi Sad
# Koliko transakcija po gradu?
tail -n +2 prodaja.csv | cut -d',' -f2 | sort | uniq -c | sort -rn

Rezultat:

      3 Beograd
      2 Novi Sad
      1 Niš

Rezime

Komanda Opcija Šta radi
sort (bez opcija) Abecedno sortiranje
sort -n Numeričko sortiranje
sort -r Obrnuto sortiranje
sort -k N Sortiranje po N-toj koloni
sort -t ',' Postavljanje separatora kolona
sort -u Sortiranje + uklanjanje duplikata
uniq (bez opcija) Uklanja uzastopne duplikate
uniq -c Broji pojavljivanja
uniq -d Prikazuje samo duplikate
cut -d',' -f2 Izvlači drugu kolonu (separator: zarez)
cut -c1-10 Izvlači karaktere 1 do 10
tr 'a-z' 'A-Z' Konvertuje u velika slova
tr -d '0-9' Briše cifre
tr -s ' ' Sazimanje uzastopnih razmaka u jedan
paste f1.txt f2.txt Spaja fajlove po kolonama
paste -d',' Prilagođeni separator

U sledećoj lekciji ćemo naučiti sed — moćan alat za automatsku izmenu teksta u fajlovima.