Comando cut de Linux: Recorte de Texto

LinuxBeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderá a utilizar el comando cut en Linux para extraer y analizar datos de archivos de texto. Simularemos un escenario en el que trabaja en una librería local y necesita procesar información de clientes y libros. El comando cut le ayudará a extraer columnas o campos específicos de sus archivos de datos, permitiendo una gestión y un análisis de datos eficientes.

Requisitos previos

Antes de comenzar esta práctica, asegúrese de tener:

  • Familiaridad básica con la línea de comandos de Linux
  • Acceso a una terminal de Linux (esta práctica asume que está utilizando una terminal en el directorio /home/labex/project)
Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarle a aprender y practicar. Siga las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel principiante con una tasa de finalización del 93%. Ha recibido una tasa de valoraciones positivas del 99% por parte de los alumnos.

Comprensión de 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, visualicemos el contenido del archivo customers.txt:

cat /home/labex/project/customers.txt

Debería 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 parecerse 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 ve la salida esperada o encuentra un error, verifique lo siguiente:

  • Asegúrese de estar en el directorio correcto (/home/labex/project)
  • Verifique que los archivos existan ejecutando ls -l
  • Si faltan los archivos, es posible que deba crearlos manualmente o contactar al administrador de la práctica

Extracción de 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 o campos mostrar.

Ejecute el siguiente comando:

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

Desglosemos este comando:

  • cut: El nombre del comando que estamos usando
  • -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ía ver una salida como esta:

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

Observe que el encabezado "Name" también se incluye. Esto se debe a que cut trata la línea de encabezado como cualquier otra línea del archivo.

Si desea excluir el encabezado, puede 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 ve la salida esperada:

  • Verifique que haya escrito el comando exactamente como se muestra
  • Asegúrese de que el archivo customers.txt no haya sido modificado
  • Intente ejecutar cat /home/labex/project/customers.txt nuevamente para verificar el contenido del archivo

Extracción de Múltiples Campos

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

Use 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)

Su salida debería verse así:

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

Como puede 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 su salida no coincide:

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

Extracción de un Rango de Campos

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

Use este comando:

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

Esto es lo nuevo en este comando:

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

Su salida debería parecerse 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 puede combinar rangos y campos individuales, como -f 1-3,5 para extraer los campos 1, 2, 3 y 5.

Si no ve la salida esperada:

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

Trabajo 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, utilizando 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 utilizando las posiciones de los caracteres:

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

Esto es lo nuevo:

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

Debería 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 obtiene la salida esperada:

  • Asegúrese de que el archivo inventory.txt se haya creado correctamente (puede comprobarlo con cat /home/labex/project/inventory.txt)
  • Verifique que haya utilizado el rango de caracteres correcto (11-25)
  • Intente ajustar el rango de caracteres si los títulos parecen estar desalineados

Combinación de 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.

Ejecute 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}$: Coincide con 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ía ver una salida similar a:

Mystery in the Woods
Science Explained

Si no ve la salida esperada:

  • Verifique que el archivo books.txt contenga los datos correctos
  • Compruebe que haya introducido correctamente la expresión regular de grep
  • Intente ejecutar el comando grep solo para ver qué líneas está seleccionando
  • Asegúrese de que el comando cut esté especificando correctamente el segundo campo

Resumen

En esta práctica de laboratorio, ha aprendido a utilizar el comando cut en Linux para extraer datos específicos de archivos de texto. Ha practicado:

  • La extracción de campos individuales de archivos CSV
  • La extracción de múltiples campos y rangos de campos
  • El trabajo con datos de ancho fijo
  • La combinación de 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.

Parámetros adicionales del comando cut no cubiertos en esta práctica:

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

Para profundizar en su aprendizaje, intente experimentar con estos parámetros adicionales y cree sus propios archivos de datos para practicar. Recuerde que el comando man cut proporciona un manual completo para el comando cut si necesita más información.

Recursos