El comando cut en Linux: extraer columnas de texto

Introducción

En el mundo de la administración de sistemas y el procesamiento de datos, contar con herramientas que permitan manipular texto de forma rápida es esencial. Uno de los comandos más útiles y sencillos de Linux es cut, cuya función principal es extraer columnas o campos de un flujo de texto basado en delimitadores o posiciones de caracteres. Aunque a primera vista pueda parecer limitado, su combinación con tuberías y otros comandos lo convierte en una pieza clave para scripts y análisis de logs.

Sintaxis básica

La forma general del comando es:

cut OPTION... [FILE]...

Si no se indica un archivo, cut lee desde la entrada estándar, lo que lo hace ideal para usar en tuberías. Las opciones más importantes definen qué parte del texto se quiere extraer y cómo se separan los campos.

Opciones más usadas

  • -f N: selecciona el campo o campos N (por ejemplo, -f 2 para el segundo campo). Se pueden indicar varios campos separados por comas (-f 1,3,5) o rangos (-f 2-4).
  • -d DELIM: establece el delimitador que separa los campos. Por defecto, cut usa la tabulación, pero con esta opción se puede especificar cualquier carácter, como una coma (-d ',') o un punto y coma (-d ';').
  • -b LIST: extrae bytes según la lista LIST (útil cuando se trabaja con datos binarios o fijos).
  • -c LIST: extrae caracteres por posición, similar a -b pero contando caracteres en lugar de bytes.

Ejemplos prácticos

Imaginemos un archivo CSV llamado datos.csv con el siguiente contenido:

nombre,edad,ciudad
Juan,30,Madrid
Ana,25,Barcelona
Luis,28,Sevilla

Para obtener solo la columna de ciudades, usamos:

cut -d ',' -f 3 datos.csv

Esto devuelve:

ciudad
Madrid
Barcelona
Sevilla

Si queremos eliminar la cabecera y quedarnos solo con los valores, podemos combinar con tail:

cut -d ',' -f 3 datos.csv | tail -n +2

Otro caso frecuente es extraer el primer y tercer campo:

cut -d ',' -f 1,3 datos.csv

Resultado:

nombre,ciudad
Juan,Madrid
Ana,Barcelona
Luis,Sevilla

Cuando el delimitador no es un carácter sencillo, como varios espacios, podemos usar -d ' ' y tratar de reducir múltiples espacios con tr -s ' ' antes de aplicar cut.

Para trabajar con archivos de logs donde la información está en posiciones fijas, la opción -c resulta muy práctica. Supongamos que cada línea tiene un timestamp de 19 caracteres seguido de un mensaje; para obtener solo el mensaje:

cut -c 20- archivo.log

Esto muestra desde el carácter 20 hasta el final de cada línea.

Consejos y trucos

  • Recuerda que cut no maneja delimitadores que sean expresiones regulares; si necesitas algo más complejo, combina con awk.
  • Usa comillas simples alrededor del delimitador para evitar que el shell interprete caracteres especiales.
  • Cuando trabajes con rangos, -f 2- significa desde el campo 2 hasta el último, mientras que -f -2 indica desde el inicio hasta el campo 2.
  • Para ver rápidamente la estructura de un archivo, prueba cut -f 1-5 -d ',' archivo.csv | head.
  • En scripts, guarda el resultado en una variable: COL2=$(cut -d ';' -f 2 entrada.txt).

Conclusión

El comando cut es una herramienta ligera pero poderosa para extraer columnas de texto en Linux. Su simplicidad lo hace ideal para tareas rápidas de procesamiento de datos, mientras que su capacidad de combinarse con otras utilidades de shell lo convierte en un componente indispensable en cualquier caja de herramientas de administración. Dominar sus opciones y saber cuándo emplearlo te permitirá ahorrar tiempo y escribir scripts más limpios y eficientes.