Recorte de texto en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Bienvenido al Laboratorio de Corte de Texto en Linux. En este laboratorio, aprenderá cómo utilizar el comando cut en Linux para extraer secciones específicas de archivos de texto. El comando cut es una herramienta poderosa de procesamiento de texto que le permite extraer secciones de cada línea de archivos o de datos transmitidos a través de tuberías (pipes).

Aprenderá cómo utilizar diferentes opciones del comando cut para extraer texto basado en delimitadores y posiciones de caracteres. Esta habilidad es particularmente útil cuando se trabaja con archivos de texto estructurados, como archivos CSV, archivos de registro (log files) o cualquier dato que siga un formato consistente.

Al final de este laboratorio, podrá extraer y manipular eficientemente datos de texto en entornos Linux, lo cual es una habilidad fundamental para la administración de sistemas, el procesamiento de datos y las tareas de automatización.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/cut("Text Cutting") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-271259{{"Recorte de texto en Linux"}} linux/cut -.-> lab-271259{{"Recorte de texto en Linux"}} linux/grep -.-> lab-271259{{"Recorte de texto en Linux"}} end

Comprender el uso básico del comando cut

En este paso, aprenderá el uso básico del comando cut. El comando cut en Linux se utiliza para extraer secciones de cada línea de archivos o de datos transmitidos a través de tuberías (pipes).

Comencemos creando un simple archivo de datos con el que podamos trabajar:

cd ~/project
echo "name:age:city:occupation" > data/users.txt
echo "Alice:25:New York:Engineer" >> data/users.txt
echo "Bob:30:San Francisco:Designer" >> data/users.txt
echo "Charlie:22:Chicago:Student" >> data/users.txt
echo "Diana:28:Boston:Doctor" >> data/users.txt

Los comandos anteriores crean un archivo llamado users.txt en el directorio ~/project/data con cinco líneas de valores separados por dos puntos.

Ahora, examinemos el contenido de este archivo:

cat data/users.txt

Debería ver la siguiente salida:

name:age:city:occupation
Alice:25:New York:Engineer
Bob:30:San Francisco:Designer
Charlie:22:Chicago:Student
Diana:28:Boston:Doctor

Usar cut con un delimitador

La forma más común de usar cut es con un delimitador para extraer campos específicos. La sintaxis básica es:

cut -d'delimiter' -f fields file

Donde:

  • -d especifica el carácter delimitador
  • -f especifica qué campo(s) se deben extraer
  • file es el archivo de entrada

Extraigamos los nombres (primer campo) de nuestro archivo de datos:

cut -d':' -f1 data/users.txt

Este comando le dice a cut que:

  • Use : como delimitador (-d':')
  • Extraiga el primer campo (-f1)
  • Del archivo data/users.txt

Debería ver la siguiente salida:

name
Alice
Bob
Charlie
Diana

Ahora, extraigamos las edades (segundo campo):

cut -d':' -f2 data/users.txt

Salida:

age
25
30
22
28

Extraer múltiples campos

Puede extraer múltiples campos especificándolos como una lista separada por comas:

cut -d':' -f1,3 data/users.txt

Esto extrae el primer y tercer campo (nombre y ciudad):

name:city
Alice:New York
Bob:San Francisco
Charlie:Chicago
Diana:Boston

Extraer un rango de campos

También puede extraer un rango de campos usando un guión:

cut -d':' -f2-4 data/users.txt

Esto extrae los campos del 2 al 4 (edad, ciudad y ocupación):

age:city:occupation
25:New York:Engineer
30:San Francisco:Designer
22:Chicago:Student
28:Boston:Doctor

Combinar con otros comandos

El comando cut se puede combinar con otros comandos usando tuberías (pipes). Por ejemplo, para extraer solo las edades de las personas que son ingenieros:

grep "Engineer" data/users.txt | cut -d':' -f2

Salida:

25

Intente experimentar con diferentes combinaciones de campos para familiarizarse con el comando.

Corte por posición de caracteres

Además de cortar campos basados en delimitadores, el comando cut también puede extraer texto basado en las posiciones de los caracteres. Esto es útil cuando se trabaja con formatos de datos de ancho fijo o cuando se necesita extraer caracteres específicos de cada línea.

Crear datos de ancho fijo

Creemos un nuevo archivo con datos de ancho fijo para demostrar esta función:

cd ~/project
echo "ID  Name      Department  Salary" > data/employees.txt
echo "001 John      IT          75000" >> data/employees.txt
echo "002 Mary      HR          65000" >> data/employees.txt
echo "003 Steve     Sales       85000" >> data/employees.txt
echo "004 Jennifer  Marketing   70000" >> data/employees.txt

Ahora, examinemos este archivo:

cat data/employees.txt

Debería ver:

ID  Name      Department  Salary
001 John      IT          75000
002 Mary      HR          65000
003 Steve     Sales       85000
004 Jennifer  Marketing   70000

Extraer por posición de caracteres

Para extraer texto basado en las posiciones de los caracteres, use la opción -c seguida de las posiciones que desea extraer. La sintaxis es:

cut -c positions file

Extraigamos los IDs de los empleados (los primeros 3 caracteres) de nuestro archivo de datos:

cut -c1-3 data/employees.txt

Este comando le dice a cut que extraiga los caracteres del 1 al 3 de cada línea. Debería ver:

ID
001
002
003
004

Extraer caracteres específicos

También puede extraer caracteres específicos no consecutivos:

cut -c1,5,9 data/employees.txt

Esto extrae el 1er, 5to y 9no carácter de cada línea:

I N
0 J
0 M
0 S
0 J

Extraer desde una posición específica hasta el final

Para extraer caracteres desde una cierta posición hasta el final de la línea, use un guión después del número de posición:

cut -c5- data/employees.txt

Esto extrae los caracteres desde la posición 5 hasta el final de cada línea:

Name      Department  Salary
John      IT          75000
Mary      HR          65000
Steve     Sales       85000
Jennifer  Marketing   70000

Combinar la extracción por posición de caracteres con tuberías (pipes)

Puede combinar el comando cut con otros comandos usando tuberías (pipes). Por ejemplo, para extraer solo los nombres de los departamentos (caracteres 13 - 22) de los empleados con un salario mayor a 70000:

grep -E "[7-9][0-9]000" data/employees.txt | cut -c13-22

Esto debería mostrar la siguiente salida:

IT
Sales

Ejercicio de práctica

Intente extraer solo los nombres (caracteres 5 - 12) del archivo de empleados:

cut -c5-12 data/employees.txt

Debería ver:

Name
John
Mary
Steve
Jennifer

Como puede ver, el corte por posición de caracteres es especialmente útil para procesar formatos de datos de ancho fijo donde cada campo ocupa un número específico de caracteres en cada línea.

Combinar cut con otras herramientas de procesamiento de texto

En este paso, aprenderá cómo combinar el comando cut con otros comandos de procesamiento de texto de Linux para realizar tareas más complejas de extracción y manipulación de datos.

Crear un archivo de datos CSV

Primero, creemos un archivo CSV (Valores Separados por Comas) con el que trabajar:

cd ~/project
echo "Date,Product,Quantity,Price,Total" > data/sales.csv
echo "2023-01-15,Laptop,5,1200,6000" >> data/sales.csv
echo "2023-01-16,Mouse,20,25,500" >> data/sales.csv
echo "2023-01-17,Keyboard,15,50,750" >> data/sales.csv
echo "2023-01-18,Monitor,8,200,1600" >> data/sales.csv
echo "2023-01-19,Headphones,12,80,960" >> data/sales.csv

Veamos el contenido de este archivo:

cat data/sales.csv

Debería ver:

Date,Product,Quantity,Price,Total
2023-01-15,Laptop,5,1200,6000
2023-01-16,Mouse,20,25,500
2023-01-17,Keyboard,15,50,750
2023-01-18,Monitor,8,200,1600
2023-01-19,Headphones,12,80,960

Combinar cut con grep

Puede usar grep para encontrar líneas que contengan patrones específicos y luego usar cut para extraer campos específicos de esas líneas:

grep "Laptop" data/sales.csv | cut -d',' -f3-5

Este comando primero encuentra todas las líneas que contienen "Laptop" y luego extrae los campos 3 - 5 (Cantidad, Precio y Total). Debería ver:

5,1200,6000

Combinar cut con sort

Puede usar sort para ordenar los datos en función de un campo específico:

cut -d',' -f2,4 data/sales.csv | sort -t',' -k2nr

Este comando extrae el Producto (campo 2) y el Precio (campo 4), luego los ordena en función del Precio en orden numérico inverso. La opción -t',' especifica el delimitador para sort, -k2 indica que se ordene por el segundo campo, n significa ordenación numérica y r significa orden inverso.

Debería ver:

Product,Price
Laptop,1200
Monitor,200
Headphones,80
Keyboard,50
Mouse,25

Combinar cut con sed

El comando sed es un editor de flujo que puede realizar transformaciones básicas de texto. Aquí hay un ejemplo de combinación de cut con sed:

cut -d',' -f1,2,5 data/sales.csv | sed 's/,/ - /g'

Esto extrae los campos Fecha, Producto y Total, luego reemplaza todas las comas con " - ". Debería ver:

Date - Product - Total
2023-01-15 - Laptop - 6000
2023-01-16 - Mouse - 500
2023-01-17 - Keyboard - 750
2023-01-18 - Monitor - 1600
2023-01-19 - Headphones - 960

Combinar cut con awk

El comando awk es una poderosa herramienta de procesamiento de texto. Aquí está cómo combinarlo con cut:

cut -d',' -f2-4 data/sales.csv | awk -F',' 'NR > 1 {print $1 " costs $" $3 " per unit"}'

Esto extrae los campos 2 - 4 (Producto, Cantidad y Precio), luego usa awk para formatear un mensaje. La condición NR > 1 omite la fila de encabezado y la declaración de impresión formatea la salida.

Debería ver:

Laptop costs $1200 per unit
Mouse costs $25 per unit
Keyboard costs $50 per unit
Monitor costs $200 per unit
Headphones costs $80 per unit

Procesar múltiples archivos

También puede usar cut con múltiples archivos. Creemos otro archivo:

echo "Category,Product,Stock" > data/inventory.csv
echo "Electronics,Laptop,15" >> data/inventory.csv
echo "Accessories,Mouse,50" >> data/inventory.csv
echo "Accessories,Keyboard,30" >> data/inventory.csv
echo "Electronics,Monitor,20" >> data/inventory.csv
echo "Accessories,Headphones,25" >> data/inventory.csv

Ahora, extraigamos el campo Producto de ambos archivos:

cut -d',' -f2 data/sales.csv data/inventory.csv

Debería ver:

Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Product
Laptop
Mouse
Keyboard
Monitor
Headphones

El comando cut procesa todos los archivos y muestra todos los resultados secuencialmente. Tenga en cuenta que se incluyen ambas filas de encabezado.

Al combinar cut con otras herramientas de procesamiento de texto, puede realizar tareas sofisticadas de manipulación de datos de manera eficiente en Linux.

Aplicaciones prácticas del comando cut

En este paso, explorará algunas aplicaciones prácticas del comando cut que podría encontrar en escenarios del mundo real.

Análisis de archivos de registro

Los archivos de registro son un caso de uso común para las herramientas de procesamiento de texto. Creemos un archivo de registro de acceso simple en estilo Apache:

cd ~/project
cat > data/access.log << EOF
192.168.1.100 - - [15/Feb/2023:10:12:01 -0500] "GET /index.html HTTP/1.1" 200 2048
192.168.1.102 - - [15/Feb/2023:10:13:25 -0500] "GET /images/logo.png HTTP/1.1" 200 4096
192.168.1.103 - - [15/Feb/2023:10:14:10 -0500] "POST /login.php HTTP/1.1" 302 1024
192.168.1.100 - - [15/Feb/2023:10:15:30 -0500] "GET /dashboard.html HTTP/1.1" 200 3072
192.168.1.104 - - [15/Feb/2023:10:16:22 -0500] "GET /css/style.css HTTP/1.1" 404 512
192.168.1.105 - - [15/Feb/2023:10:17:40 -0500] "GET /index.html HTTP/1.1" 200 2048
EOF

Extraigamos las direcciones IP (primer campo) del archivo de registro:

cut -d' ' -f1 data/access.log

Debería ver:

192.168.1.100
192.168.1.102
192.168.1.103
192.168.1.100
192.168.1.104
192.168.1.105

Ahora, extraigamos los códigos de estado HTTP (9º campo):

cut -d' ' -f9 data/access.log

Debería ver:

200
200
302
200
404
200

Procesamiento de archivos de configuración

Otro caso de uso común es el procesamiento de archivos de configuración. Creemos un archivo de configuración simple:

cat > data/config.ini << EOF
[Database]
host=localhost
port=3306
user=dbuser
password=dbpass

[Server]
host=192.168.1.10
port=8080
maxConnections=100

[Logging]
level=INFO
file=/var/log/app.log
EOF

Para extraer todos los nombres de los parámetros (la parte antes del signo igual):

grep -v "^\[" data/config.ini | cut -d'=' -f1

Este comando utiliza grep -v "^\[" para excluir los encabezados de sección (líneas que comienzan con [), luego utiliza cut para extraer la parte antes de =. Debería ver:

host
port
user
password
host
port
maxConnections
level
file

Extracción de datos de archivos CSV para informes

Creemos un archivo CSV más complejo que represente las calificaciones de los estudiantes:

cat > data/grades.csv << EOF
StudentID,Name,Math,Science,English,History,Average
S001,John Smith,85,92,78,88,85.75
S002,Mary Johnson,90,88,92,85,88.75
S003,Robert Davis,78,80,85,92,83.75
S004,Jennifer Lee,95,93,90,87,91.25
S005,Michael Brown,82,85,88,90,86.25
EOF

Para generar un informe simple que muestre los nombres de los estudiantes y sus calificaciones promedio:

tail -n +2 data/grades.csv | cut -d',' -f2,6

El comando tail -n +2 omite la fila de encabezado y cut extrae los campos Nombre y Promedio. Debería ver:

John Smith,85.75
Mary Johnson,88.75
Robert Davis,83.75
Jennifer Lee,91.25
Michael Brown,86.25

Para encontrar a los estudiantes con una calificación promedio superior a 85:

tail -n +2 data/grades.csv | cut -d',' -f2,6 | awk -F',' '$2 > 85 {print $1 " has an average of " $2}'

Debería ver:

John Smith has an average of 85.75
Mary Johnson has an average of 88.75
Jennifer Lee has an average of 91.25
Michael Brown has an average of 86.25

Extracción de columnas específicas de la salida de un comando

Puede utilizar cut para extraer columnas específicas de la salida de un comando. Por ejemplo, para listar solo los nombres y tamaños de los archivos en el directorio actual:

ls -l ~/project/data | tail -n +2 | cut -d' ' -f5,9

Este comando lista los archivos en formato detallado, omite la fila de encabezado y extrae el tamaño (campo 5) y el nombre (campo 9). La salida exacta dependerá de sus archivos, pero se verá algo así:

237 access.log
99 config.ini
203 employees.txt
179 grades.csv
110 inventory.csv
150 sales.csv
264 users.txt

Estos ejemplos demuestran cómo se puede utilizar el comando cut en diversos escenarios prácticos para extraer y procesar partes específicas de datos de texto.

Resumen

En este laboratorio, ha aprendido cómo utilizar el comando cut de Linux para extraer porciones específicas de texto de archivos. Ha cubierto:

  • El uso básico de cut con delimitadores para extraer campos de archivos de texto estructurados
  • Cómo extraer texto basado en posiciones de caracteres para formatos de datos de ancho fijo
  • Combinar cut con otras herramientas de procesamiento de texto como grep, sort, sed y awk para una manipulación de datos más compleja
  • Aplicaciones prácticas del comando cut para escenarios comunes como el análisis de registros, el procesamiento de archivos de configuración y la generación de informes de datos

El comando cut es una herramienta poderosa en el conjunto de herramientas de procesamiento de texto de Linux. Aunque puede parecer simple al principio, su capacidad para extraer porciones específicas de texto lo hace invaluable para muchas tareas de procesamiento de datos. Cuando se combina con otros comandos de Linux a través de tuberías (pipes), se convierte en parte de un sistema de procesamiento de texto flexible y poderoso.

Algunos puntos clave a recordar:

  • Utilice -d para especificar un delimitador y -f para seleccionar campos cuando trabaje con texto estructurado
  • Utilice -c para extraer caracteres específicos cuando trabaje con datos de ancho fijo
  • Combine cut con otros comandos utilizando tuberías (pipes) para un procesamiento más sofisticado
  • El comando cut es más efectivo cuando los datos siguen un formato consistente

Con estas habilidades, ahora puede extraer y procesar datos de texto de manera eficiente en entornos Linux, lo cual es esencial para diversas tareas administrativas y de procesamiento de datos.