CodeGym /Cursos /Docker SELF /Ordenar y filtrar archivos: comandos `sort`, `uniq`, `cut...

Ordenar y filtrar archivos: comandos `sort`, `uniq`, `cut`

Docker SELF
Nivel 8 , Lección 3
Disponible

Ordenar y filtrar archivos: comandos sort, uniq, cut

1. Comando sort

El comando sort está diseñado para ordenar líneas en un archivo de texto. Funciona con cualquier formato de texto: desde texto plano hasta CSV. Por defecto, ordena las líneas en orden alfabético. Sin embargo, hay un montón de opciones que te permitirán hacer verdaderas maravillas.

Sintaxis básica

sort [opciones] archivo

Ejemplo simple

Supongamos que tenemos un archivo names.txt con el siguiente contenido:

Charlie
Alice
Bob
David

Podemos ordenarlo alfabéticamente así:

sort names.txt

Resultado:

Alice
Bob
Charlie
David

Opciones clave de sort

Orden inverso

Si deseas ordenar las líneas en orden descendente, utiliza la opción -r:

sort -r names.txt

Resultado:

David
Charlie
Bob
Alice

Ordenamiento numérico

Para números, el ordenamiento alfabético puede no funcionar correctamente. Por ejemplo, este es el contenido del archivo numbers.txt:

10
2
5
1

El ordenamiento alfabético dará como resultado:

1
10
2
5

Pero con la opción -n (ordenamiento numérico):

sort -n numbers.txt

El resultado será correcto:

1
2
5
10

Tolerancia a espacios

A veces las líneas tienen espacios al principio o al final. Para que sort no se confunda, utiliza la opción -b:

sort -b archivo_sucio.txt

Ejemplo

Supongamos que tenemos un registro de visitas a una página web visits.log:

user2 15
user1 5
user3 30
user4 20

Queremos ordenar los usuarios por el número de visitas (la segunda columna). Esto se hace así:

sort -k2 -n visits.log

Dónde -k2 significa "usar la segunda columna para ordenar". Resultado:

user1 5
user2 15
user4 20
user3 30

2. Comando uniq

El comando uniq elimina las líneas duplicadas en un archivo. Sin embargo, es importante recordar: solo funciona con duplicados consecutivos. Es decir, si las líneas idénticas aparecen en diferentes partes del archivo, primero debes ordenarlas.

Sintaxis básica

uniq [opciones] archivo

Ejemplo simple

Supongamos que tenemos un archivo colors.txt:

red
green
green
blue
blue
blue
red

Si simplemente usamos uniq:

uniq colors.txt

El resultado será:

red
green
blue
red

Eliminar duplicados inevitables

Primero, ordenamos el archivo:

sort colors.txt | uniq

Resultado:

blue
green
red

Opciones clave de uniq

Contar repeticiones

Si quieres saber cuántas veces aparece cada línea, usa la opción -c:

sort colors.txt | uniq -c

Resultado:

   3 blue
   2 green
   2 red

Ejemplo

En el archivo access.log tenemos una lista de direcciones IP:

192.168.0.1
192.168.0.2
192.168.0.1
192.168.0.3
192.168.0.1

Queremos saber qué IP aparece más frecuentemente:

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

Resultado:

   3 192.168.0.1
   1 192.168.0.2
   1 192.168.0.3

3. Comando cut

El comando cut permite extraer partes específicas de las líneas, por ejemplo, columnas individuales en un archivo CSV o rangos de caracteres.

Sintaxis básica

cut [opciones] archivo

Ejemplo simple

Archivo data.csv:

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

Extraigamos solo los nombres (la primera columna):

cut -d',' -f1 data.csv

Resultado:

Alice
Bob
Charlie

Donde:

  • -d',' — delimitador (coma).
  • -f1 — campo (columna) a extraer.

Opciones principales de cut

Seleccionar un rango de caracteres

Si nuestro archivo data.csv tiene columnas de ancho fijo:

Alice      25 Developer
Bob        30 Designer
Charlie    22 Manager

Podemos extraer solo la edad (caracteres del 12 al 14):

cut -c12-14 data.csv

Resultado:

25
30
22

Seleccionar múltiples campos

Si tenemos un archivo log.csv:

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

Seleccionemos solo la fecha y el nivel de logs (campos 1 y 2):

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

Resultado:

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

4. Ejemplo práctico: Combinación de sort, uniq y cut

Tomemos un archivo de log con los siguientes datos:

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. Extraeremos las direcciones IP:
cut -d',' -f2 log.txt
  1. Quitaremos los duplicados y los contaremos:
cut -d',' -f2 log.txt | sort | uniq -c
  1. Ordenaremos por número de ocurrencias:
cut -d',' -f2 log.txt | sort | uniq -c | sort -rn

Resultado:

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