Comando cut de Linux: Corte de texto

LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a utilizar el comando cut en Linux para extraer y analizar datos de archivos de texto. Simularemos un escenario en el que trabajas en una librería local y necesitas procesar información de clientes y libros. El comando cut te ayudará a extraer columnas o campos específicos de tus archivos de datos, permitiendo una gestión y un análisis de datos eficientes.

Requisitos previos

Antes de comenzar este laboratorio, asegúrate de tener:

  • Familiaridad básica con la línea de comandos de Linux
  • Acceso a una terminal de Linux (este laboratorio asume que estás utilizando una terminal en el directorio /home/labex/project)

Comprender los datos de la librería

Comencemos examinando los archivos de datos de la librería. Tenemos dos archivos: customers.txt y books.txt.

Primero, veamos el contenido del archivo customers.txt:

cat /home/labex/project/customers.txt

Deberías ver una salida similar a esta:

ID,Name,Age,Email
1,John Doe,25,john.doe@email.com
2,Jane Smith,35,jane.smith@email.com
3,Lily Chen,30,lily.chen@email.com
4,Andy Brown,22,andy.brown@email.com

Ahora, veamos el archivo books.txt:

cat /home/labex/project/books.txt

La salida debería ser parecida a:

ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99

Estos archivos contienen valores separados por comas (CSV) con diferentes campos para clientes y libros.

Si no ves la salida esperada o encuentras un error, verifica lo siguiente:

  • Asegúrate de estar en el directorio correcto (/home/labex/project)
  • Verifica que los archivos existan ejecutando ls -l
  • Si los archivos faltan, es posible que debas crearlos manualmente o contactar al administrador de tu laboratorio

Extraer nombres de clientes

Ahora que hemos visto nuestros datos, usemos el comando cut para extraer información específica. Comenzaremos extrayendo los nombres de los clientes del archivo customers.txt.

El comando cut utiliza la opción -d para especificar un delimitador (en nuestro caso, una coma) y la opción -f para seleccionar qué campo(s) mostrar.

Ejecuta el siguiente comando:

cut -d ',' -f 2 /home/labex/project/customers.txt

Analicemos este comando:

  • cut: El nombre del comando que estamos utilizando
  • -d ',': Especifica que estamos usando una coma como delimitador entre campos
  • -f 2: Indica a cut que extraiga el segundo campo
  • /home/labex/project/customers.txt: La ruta a nuestro archivo de entrada

Deberías ver una salida como esta:

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

Observa que el encabezado "Name" también está incluido. Esto se debe a que cut trata la línea de encabezado igual que cualquier otra línea del archivo.

Si deseas excluir el encabezado, puedes usar el comando tail en combinación con cut:

cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2

Esta tubería (pipeline) hace dos cosas:

  1. cut extrae el segundo campo (nombres) de cada línea
  2. tail -n +2 muestra la salida a partir de la segunda línea, omitiendo efectivamente el encabezado

La salida ahora debería ser:

John Doe
Jane Smith
Lily Chen
Andy Brown

Si no ves la salida esperada:

  • Verifica dos veces que hayas escrito el comando exactamente como se muestra
  • Asegúrate de que el archivo customers.txt no haya sido modificado
  • Intenta ejecutar cat /home/labex/project/customers.txt nuevamente para verificar el contenido del archivo

Extraer múltiples campos

A menudo, necesitamos extraer varios campos de nuestros datos. Extraigamos tanto los nombres como las edades de los clientes del archivo customers.txt.

Usa el siguiente comando:

cut -d ',' -f 2,3 /home/labex/project/customers.txt

Este comando es similar al anterior, pero ahora especificamos dos campos en la opción -f:

  • -f 2,3: Extrae el segundo y tercer campo (nombre y edad)

Tu salida debería verse así:

Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22

Como puedes ver, podemos especificar múltiples campos separándolos con comas en la opción -f. La salida mantiene el delimitador original (coma) entre los campos extraídos.

Si tu salida no coincide:

  • Asegúrate de haber incluido la coma entre el 2 y el 3 en la opción -f
  • Verifica que el archivo customers.txt no haya sido alterado
  • Intenta ejecutar el comando sin la opción -d ',' para ver si el archivo utiliza un delimitador diferente

Extraer un rango de campos

El comando cut también nos permite extraer un rango de campos. Extraigamos todos los campos desde el ID del cliente hasta la edad (campos 1-3) del archivo customers.txt.

Usa este comando:

cut -d ',' -f 1-3 /home/labex/project/customers.txt

Esto es lo nuevo en este comando:

  • -f 1-3: Esto especifica un rango de campos del 1 al 3, inclusive

Tu salida debería ser parecida a:

ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22

Este comando extrae un rango de campos del 1 al 3. También puedes combinar rangos y campos individuales, como -f 1-3,5 para extraer los campos 1, 2, 3 y 5.

Si no ves la salida esperada:

  • Verifica que hayas usado un guion (-) entre el 1 y el 3 en la opción -f
  • Asegúrate de que el archivo customers.txt no haya sido modificado
  • Intenta extraer cada campo individualmente (por ejemplo, -f 1, -f 2, -f 3) para comprobar si todos los campos están presentes en el archivo

Trabajar con campos de ancho fijo

A veces, los datos no están separados por delimitadores, sino que están organizados en columnas de ancho fijo. El comando cut también puede manejar esto, usando la opción -c para especificar las posiciones de los caracteres.

Creemos un nuevo archivo con datos de ancho fijo:

cat << EOF > /home/labex/project/inventory.txt
ISBN     Title          Quantity
1234567890The Great Adv      100
2345678901Mystery in th       75
3456789012Cooking Basi       50
4567890123Science Exp        125
EOF

Este comando utiliza un "here-document" (<<EOF) para crear un nuevo archivo llamado inventory.txt con datos de ancho fijo.

Ahora, extraigamos solo los títulos de los libros usando las posiciones de los caracteres:

cut -c 11-25 /home/labex/project/inventory.txt

Esto es lo nuevo:

  • -c 11-25: Esto le dice a cut que extraiga los caracteres del 11 al 25 de cada línea

Deberías ver:

itle          Q
The Great Adv
Mystery in th
Cooking Basi
Science Exp

Este comando extrae los caracteres del 11 al 25 de cada línea, lo que corresponde al campo del título en nuestros datos de ancho fijo.

Si no obtienes la salida esperada:

  • Asegúrate de que el archivo inventory.txt se haya creado correctamente (puedes verificarlo con cat /home/labex/project/inventory.txt)
  • Verifica que hayas usado el rango de caracteres correcto (11-25)
  • Intenta ajustar el rango de caracteres si los títulos parecen desalineados

Combinar cut con otros comandos

El comando cut se vuelve aún más potente cuando se combina con otros comandos de Linux. Usemos cut junto con grep para encontrar todos los libros con un precio superior a $20 y mostrar sus títulos.

Ejecuta este comando:

grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2

Esta tubería de comandos hace dos cosas:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': Utiliza una expresión regular para encontrar líneas donde el precio es de $20 o más
    • ,[2-9][0-9]\.[0-9]{2}$: Busca una coma, seguida de un número del 20 al 99, un punto decimal y dos dígitos más al final de la línea
  2. cut -d ',' -f 2: Extrae solo el título del libro (segundo campo) de las líneas que grep encontró

Deberías ver una salida similar a:

Mystery in the Woods
Science Explained

Si no ves la salida esperada:

  • Verifica que el archivo books.txt contenga los datos correctos
  • Comprueba que hayas ingresado la expresión regular de grep correctamente
  • Intenta ejecutar el comando grep solo para ver qué líneas está seleccionando
  • Asegúrate de que el comando cut esté especificando correctamente el segundo campo

Resumen

En este laboratorio, has aprendido a utilizar el comando cut en Linux para extraer datos específicos de archivos de texto. Has practicado:

  • Extraer campos individuales de archivos CSV
  • Extraer múltiples campos y rangos de campos
  • Trabajar con datos de ancho fijo
  • Combinar cut con otros comandos como grep

Estas habilidades son invaluables para el procesamiento y análisis de datos en diversos escenarios, desde la gestión del inventario de una librería hasta el manejo de cualquier tipo de datos de texto estructurados.

Otros parámetros del comando cut no cubiertos en este laboratorio:

  • -s: Suprime las líneas que no contienen delimitadores
  • --output-delimiter=STRING: Usa STRING como delimitador de salida
  • --complement: Complementa el conjunto de bytes, caracteres o campos seleccionados

Para continuar con tu aprendizaje, intenta experimentar con estos parámetros adicionales y crea tus propios archivos de datos para practicar. Recuerda que el comando man cut proporciona un manual completo sobre el comando cut si necesitas más información.