CodeGym /Corsi /Docker SELF /Ordinamento e filtraggio dei file: comandi `sort`, `uniq`...

Ordinamento e filtraggio dei file: comandi `sort`, `uniq`, `cut`

Docker SELF
Livello 8 , Lezione 3
Disponibile

Ordinamento e filtraggio dei file: comandi sort, uniq, cut

1. Comando sort

Il comando sort è pensato per ordinare le righe in un file di testo. Funziona con qualsiasi formato di testo: dal semplice testo piano a CSV. Di default, ordina le righe in ordine alfabetico. Tuttavia, ci sono un sacco di opzioni che ti permetteranno di fare delle cose davvero fighe.

Sintassi base

sort [opzioni] file

Esempio semplice

Supponiamo di avere un file names.txt con il seguente contenuto:

Charlie
Alice
Bob
David

Possiamo ordinarlo in ordine alfabetico così:

sort names.txt

Risultato:

Alice
Bob
Charlie
David

Opzioni principali di sort

Ordinamento inverso

Se vuoi ordinare le righe in ordine decrescente, usa l'opzione -r:

sort -r names.txt

Risultato:

David
Charlie
Bob
Alice

Ordinamento numerico

Per i numeri, l'ordinamento alfabetico potrebbe non funzionare correttamente. Ad esempio, ecco il contenuto del file numbers.txt:

10
2
5
1

L'ordinamento alfabetico restituisce:

1
10
2
5

Ma con l'opzione -n (ordinamento numerico):

sort -n numbers.txt

Il risultato sarà corretto:

1
2
5
10

Ignorare gli spazi

A volte le righe contengono spazi all'inizio o alla fine. Per far sì che sort non si confonda, usa l'opzione -b:

sort -b file_sporco.txt

Esempio

Supponiamo di avere un log delle visite a un sito web visits.log:

user2 15
user1 5
user3 30
user4 20

Vogliamo ordinare gli utenti per numero di visite (seconda colonna). Ecco come farlo:

sort -k2 -n visits.log

Dove -k2 significa "usa la seconda colonna per ordinare". Risultato:

user1 5
user2 15
user4 20
user3 30

2. Comando uniq

Il comando uniq rimuove le righe duplicate in un file. Tuttavia, è importante ricordare: funziona solo con duplicati consecutivi. Cioè, se le stesse righe si trovano in parti diverse del file, devono essere ordinate prima.

Sintassi principale

uniq [opzioni] file

Esempio semplice

Supponiamo di avere un file colors.txt:

rosso
verde
verde
blu
blu
blu
rosso

Se usiamo semplicemente uniq:

uniq colors.txt

Il risultato sarà:

rosso
verde
blu
rosso

Rimuovere duplicati inevitabili

Prima ordinate il file:

sort colors.txt | uniq

Risultato:

blu
verde
rosso

Opzioni principali di uniq

Conteggio ripetizioni

Se vuoi sapere quante volte ogni riga appare, usa l'opzione -c:

sort colors.txt | uniq -c

Risultato:

   3 blu
   2 verde
   2 rosso

Esempio

Nel file access.log abbiamo un elenco di indirizzi IP:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

Vogliamo sapere quale IP appare più frequentemente:

sort access.log | uniq -c | sort -rn

Risultato:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. Comando cut

Il comando cut permette di estrarre parti specifiche delle righe, come colonne separate in un file CSV o intervalli di caratteri.

Sintassi base

cut [opzioni] file

Esempio semplice

File data.csv:

Alice,25,Developer
Bob,30,Designer
Charlie,22,Manager

Estraiamo solo i nomi (la prima colonna):

cut -d',' -f1 data.csv

Risultato:

Alice
Bob
Charlie

Dove:

  • -d',' — delimitatore (virgola).
  • -f1 — campo (colonna) da estrarre.

Opzioni principali di cut

Selezione di un intervallo di caratteri

Se il nostro file data.csv ha colonne di larghezza fissa:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

Possiamo estrarre solo l'età (caratteri dalla posizione 12 alla 14):

cut -c12-14 data.csv

Risultato:

25
30
22

Selezione di più campi

Se abbiamo un file log.csv:

2023-01-01,INFO,Server started
2023-01-02,ERROR,Connection failed
2023-01-03,INFO,Server stopped

Selezioniamo solo la data e il livello di log (campi 1 e 2):

cut -d',' -f1,2 log.csv

Risultato:

2023-01-01,INFO
2023-01-02,ERROR
2023-01-03,INFO

4. Esempio pratico: Combinazione di sort, uniq e cut

Prendiamo un file di log con questi dati:

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
  1. Estrarre gli indirizzi IP:
cut -d',' -f2 log.txt
  1. Rimuovere i duplicati e contarli:
cut -d',' -f2 log.txt | sort | uniq -c
  1. Ordinare in base al numero di occorrenze:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

Risultato:

2 192.168.0.2
2 192.168.0.1
1 192.168.0.3
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION