Aprende leyendo en orden

Herramientas de formateo de texto — sort / uniq / cut / wc / tr / tee

Practica el orden con sort -n, el conteo de duplicados con sort | uniq -c, la extracción de columnas con cut -d',' -f1, el conteo de líneas con wc -l, la traducción tr 'a-z' 'A-Z' y la salida doble de tee, un comando a la vez con diagramas y terminal.

Ordenar líneas — sort

En este artículo practicarás seis comandos de formateo de texto, uno a la vez: sort / uniq / cut / wc / tr / tee. El primero es sort. Reordena las líneas de la entrada en orden lexicográfico (carácter por carácter). Usa sort -n para ordenar las líneas como números y sort -r para el orden descendente. En orden lexicográfico, 10 va antes que 2 (se comparan los primeros caracteres 1 y 2), así que ordenar números requiere -n.

FormaSignificado
sortOrdena las líneas en orden lexicográfico
sort -nOrdena las líneas por valor numérico
sort -rInvierte el orden (descendente)
sort es orden lexicográfico, sort -n es numérico
comparadocomo textosort10 2 30nums.txt10 2 30comparadocomo númerossort -n2 10 30
El orden lexicográfico compara los primeros caracteres: 10 va antes que 2. Añade -n para el orden numérico.
printf 'cherry\napple\nbanana\n' > words.txt   # crea un archivo de 3 líneas
sort words.txt                                   # apple banana cherry (orden lexicográfico)
sort -r words.txt                                # cherry banana apple (descendente)
printf '100\n9\n25\n' > scores.txt              # crea un archivo numérico
sort scores.txt                                  # 100 25 9 (el 1 va primero)
sort -n scores.txt                               # 9 25 100 (orden numérico)

① Crea un archivo de tres líneas numéricas con printf '10\n2\n30\n' > nums.txt.

② Ordénalo con sort nums.txt y comprueba que en orden lexicográfico 10 va antes que 2.

③ Añade a sort la opción de orden numérico y comprueba que el orden pasa a 2 → 10 → 30.

④ Después añade la opción de orden inverso y comprueba que las líneas salen de mayor a menor. (Si lo ejecutas correctamente, aparecerá una explicación.)

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Agrupar duplicados — uniq

uniq agrupa en una sola las líneas idénticas que están una junto a otra. Nunca mira los duplicados alejados, así que normalmente se ejecuta sort primero para juntar las líneas iguales y se le pasa el resultado por una tubería. Con uniq -c, cada línea queda precedida por su número de apariciones: un conteo por categoría al instante.

FormaSignificado
uniqAgrupa en una sola las líneas idénticas adyacentes
sort file.txt | uniqOrdena primero para agrupar también los duplicados alejados
uniq -cAntepone a cada línea su número de apariciones
Ordenar primero y agrupar con uniq
b a asorta b b (adyacentes)uniqabduplicadoseliminados
uniq solo ve los duplicados adyacentes: ejecuta sort primero para juntar las líneas iguales.
printf 'banana\napple\nbanana\napple\n' > items.txt   # crea un archivo de 4 líneas
sort items.txt                                          # apple apple banana banana
sort items.txt | uniq                                   # apple banana (duplicados eliminados)
sort items.txt | uniq -c                                # 2 apple / 2 banana (apariciones)

① Crea un archivo de cinco líneas con duplicados usando printf 'pear\nfig\npear\nfig\nfig\n' > fruit.txt.

② Ordénalo con sort fruit.txt y comprueba que las líneas idénticas quedan una junto a otra.

③ Pasa la salida de sort a uniq por una tubería y comprueba que los duplicados se agrupan en uno.

④ En la misma tubería, añade a uniq la opción de apariciones y comprueba que cada línea va precedida por su conteo.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Extraer columnas — cut

cut divide cada línea según un delimitador y conserva solo los campos que pidas. El delimitador va después de -d y el número de campo después de -f, así que cut -d',' -f1 extrae la primera columna de un CSV. Para varios campos, enuméralos con comas como -f1,3. Es la herramienta para sacar solo las columnas que necesitas de un CSV o de un archivo de configuración separado por dos puntos.

FormaSignificado
cut -d',' -f1Extrae el campo 1 de líneas separadas por comas
cut -d':' -f1Extrae el campo 1 de líneas separadas por :
cut -d',' -f1,3Extrae los campos 1 y 3 juntos
cut divide por un delimitador y elige campos
cut -d',' -f1sato,30,tokyocampo 1satocampo 230campo 3tokyo-f1: solo satodividido en 3 por comas
La línea se divide por el delimitador de -d y solo se muestran los campos numerados en -f.
printf 'root:x:0\nuser:x:1000\n' > passwd.txt   # crea un archivo separado por dos puntos
cut -d':' -f1 passwd.txt                          # solo el campo 1 (los nombres)
cut -d':' -f1,3 passwd.txt                        # campos 1 y 3

① Crea un archivo separado por comas con printf 'sato,30,tokyo\nito,25,osaka\n' > people.csv.

② Usa cut con la coma como delimitador para extraer solo el campo 1 (los nombres).

③ Después extrae los campos 1 y 3 juntos y comprueba cómo se indican varios campos.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Contar líneas, palabras y bytes — wc

wc cuenta las líneas, palabras y bytes de su entrada. Sin opciones muestra los tres números; wc -l muestra solo el número de líneas, wc -w solo el de palabras y wc -c solo el de bytes. La que más usarás es wc -l: alimentada desde una tubería, como en ls | wc -l, responde preguntas como «¿cuántos archivos hay?» o «¿cuántas líneas coinciden?».

FormaSignificado
wcMuestra líneas, palabras y bytes juntos
wc -lMuestra solo el número de líneas
wc -wMuestra solo el número de palabras
wc -cMuestra solo el número de bytes
wc cuenta tres números
memo.txtgood morning / hellowc -lwc -wwc -c2 líneas3 palabras19 bytes
Misma entrada: la opción decide qué se cuenta.
printf 'one two three\nfour\n' > draft.txt   # crea un archivo de 2 líneas y 4 palabras
wc draft.txt                                  # líneas, palabras y bytes juntos
wc -l draft.txt                               # 2 (solo líneas)
ls | wc -l                                    # desde una tubería: cuenta los archivos

① Crea un archivo de dos líneas con printf 'good morning\nhello\n' > memo.txt.

② Ejecuta wc memo.txt y comprueba que aparecen tres números: líneas, palabras y bytes.

③ Añade la opción que muestra solo el número de líneas y comprueba que muestra 2.

④ Después añade la opción que muestra solo el número de palabras y comprueba que muestra 3.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Traducir caracteres — tr

tr reemplaza los caracteres de la entrada estándar carácter por carácter. tr 'a-z' 'A-Z' convierte minúsculas en mayúsculas. tr -s comprime las repeticiones de un mismo carácter en uno solo (por ejemplo, espacios repetidos) y tr -d elimina los caracteres que indiques. tr no acepta un nombre de archivo como argumento: lee desde una tubería o una redirección de entrada.

FormaSignificado
tr 'a-z' 'A-Z'Convierte minúsculas en mayúsculas
tr -s ' 'Comprime los caracteres repetidos en uno solo
tr -d 'x'Elimina los caracteres indicados
tr traduce, comprime y elimina caracteres
hellotr 'a-z' 'A-Z'HELLOa b(3 espacios)tr -s ' 'a b(1 espacio)a-b-ctr -d '-'abc
De arriba abajo: traducción (minúsculas → mayúsculas), compresión de repeticiones (-s) y eliminación (-d).
echo 'hello linux' | tr 'a-z' 'A-Z'     # HELLO LINUX
echo 'a   b   c' | tr -s ' '            # comprime los espacios repetidos -> a b c
echo 'a-b-c' | tr -d '-'                # elimina - -> abc

① Pasa la salida de echo 'desktech learn' a tr por una tubería y convierte las minúsculas en mayúsculas.

② Después pasa la salida de echo 'x y z' a tr y usa la opción que comprime los espacios repetidos en uno solo.

③ Pasa la salida de echo 'a-b-c' a tr y usa la opción de eliminación para obtener abc.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Dividir la salida entre pantalla y archivo — tee

tee toma lo que recibe de la tubería, lo muestra en pantalla y lo escribe en un archivo al mismo tiempo. Úsalo cuando quieras un registro de los resultados intermedios sin dejar de pasar los datos al siguiente comando. Encadenado como comando | tee out.txt | siguiente comando, registra en out.txt mientras la tubería sigue su curso. Para añadir al final de un archivo existente en vez de sobrescribirlo, usa tee -a.

FormaSignificado
tee out.txtEscribe en pantalla y en el archivo (sobrescribe)
tee -a out.txtMuestra en pantalla y añade al final del archivo
tee envía la salida a pantalla y archivo
echo hi| tee out.txt| siguiente cmdhi en pantallahi tambiénen out.txtla tubería siguecat out.txthi sigue ahí
tee muestra en pantalla lo que recibe, lo escribe en el archivo y puedes comprobarlo después con cat.
ls | tee list.txt              # muestra el listado y lo guarda en list.txt
cat list.txt                   # también está en el archivo
echo 'extra' | tee -a list.txt # -a añade en vez de sobrescribir

① Pasa la salida de echo 'one two' a tee por una tubería para escribirla en note.txt, y comprueba que el mismo contenido aparece también en pantalla.

② Ejecuta cat note.txt para comprobar que el mismo contenido está también en el archivo.

③ Después añade la salida de echo 'three' al final de note.txt con la opción de añadir de tee.

④ Vuelve a ejecutar cat note.txt y comprueba que el archivo ha crecido a dos líneas.

Linux console
0 / 3 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué líneas trata uniq como duplicadas?

Pregunta 2¿Qué muestra cut -d',' -f1 users.csv?

Pregunta 3¿Qué ocurre al ejecutar echo hi | tee out.txt?