Guía de Uso del Comando cut en Linux

El comando cut en Linux es una poderosa utilidad de procesamiento de texto utilizada para extraer secciones específicas de cada línea de un archivo o de una entrada canalizada. No altera el archivo original, sino que simplemente lee el contenido y muestra las partes deseadas en la salida estándar. En este artículo, exploraremos el propósito del comando cut en Linux y demostraremos cómo usarlo a través de ejemplos prácticos y del mundo real.
Entendiendo el Comando cut
El comando cut es una herramienta valiosa para cualquier persona que trabaje con texto estructurado, permitiendo la manipulación y extracción de datos de manera eficiente en sistemas similares a Unix. Extrae partes de una línea basándose en posiciones de bytes, posiciones de caracteres, delimitadores o campos. Esto lo hace especialmente útil para filtrar y organizar datos en scripts de shell y operaciones en la línea de comandos. También es útil para tareas como recuperar columnas de archivos CSV, recortar caracteres o analizar archivos de registro. Aunque se usa comúnmente con archivos, el comando cut también puede procesar la salida de otros comandos cuando se usa en una canalización.
Sintaxis Básica del Comando cut
El comando cut tiene una sintaxis muy simple que utiliza opciones y un nombre de archivo. Aquí está cómo funciona:
cut[OPTIONS][FILE]Aquí, OPTIONS te permite controlar cómo funciona el comando cut. Puedes elegir un separador de campos (como una coma), seleccionar ciertos campos, establecer rangos de campos, ignorar líneas sin el separador, etc. FILE es el archivo objetivo del cual deseas extraer datos. El comando cut leerá de la entrada estándar si no especificas un archivo. Además, puedes especificar múltiples archivos; en ese caso, el comando cut los tratará como uno al combinar su contenido antes de procesarlos.
Opciones Comúnmente Usadas
El comando cut te permite extraer partes específicas de texto de un archivo o entrada. Puedes indicarle qué extraer usando diferentes opciones, como bytes, caracteres o campos, y estableciendo un separador específico (delimitador). Aquí están las opciones comunes:
- -f o –fields=LIST: Selecciona campos específicos basados en un delimitador elegido.
- -b o –bytes=LIST: Extrae ciertos bytes de cada línea.
- -c o –characters=LIST: Extrae caracteres específicos de cada línea.
- -d o –delimiter: Establece un delimitador personalizado en lugar del tabulador por defecto.
- –complement: Muestra todo excepto los campos, bytes o caracteres seleccionados.
- -s o –only-delimited: Omite líneas que no tienen el delimitador. Por defecto, tales líneas se incluyen.
- –output-delimiter: Te permite elegir un delimitador diferente para la salida. Por defecto, cut usa el mismo delimitador que la entrada.
Las opciones -f, -b y -c utilizan una LIST para definir qué extraer, como campos, bytes o caracteres. Puedes especificar lo siguiente:
- Un solo número como 2
- Múltiples números separados por comas, como 1,3,5
- Un rango como 2-4 (significa extraer de 2 a 4)
N-para significar desde la posición N hasta el final-Mpara significar desde el inicio hasta la posición M
Cómo Funciona el Comando cut en Linux
Pasemos por algunos ejemplos prácticos para entender cómo funciona el comando cut en Linux. Para este propósito, primero crea un archivo llamado “mte.csv” usando el comando echo:
echo -e "empID,empName,empDesig\n101,Anees,Author\n102,Asghar,Manager\n103,Damian,CEO"> mte.csvVerifiquemos el contenido del archivo usando el comando cat:
cat mte.csv
Aquí, es importante notar que el comando cut no cambia el archivo, sino que simplemente muestra la salida seleccionada según lo que pidas.
Extrayendo Datos por Caracteres
Usa la opción -c junto con el comando cut para extraer caracteres por posición:
cut -c1,8 mte.csvEste comando extrae el primer y el octavo carácter de cada fila:
Para extraer caracteres entre posiciones o rangos específicos, podemos usar el comando cut de la siguiente manera:
cut -c1-8 mte.csvEste comando extrae los caracteres (entre 1 y 8) de cada fila:
Extrayendo por Byte
Podemos usar la opción -b con el comando cut para extraer bytes específicos de cada línea:
cut -b1-3 mte.csvEste comando extrae los primeros tres bytes de cada línea del archivo llamado mte.csv:
Extrayendo por Campo (Columna)
Puedes extraer un campo completo de un archivo usando el comando cut. Para hacerlo, usa -f junto con -d, de la siguiente manera:
cut -d',' -f2 mte.csvEn este comando, -d',' establece el delimitador a una coma, y -f2 le dice a cut que extraiga el segundo campo de cada línea en el archivo mte.csv:
Usando Delimitadores Personalizados en cut
El comando cut utiliza un tabulador como delimitador, por defecto. Sin embargo, si tus campos están separados por algo distinto a un tabulador, usa -d para establecer el correcto. Por ejemplo, podemos obtener la quinta palabra de una oración separada por espacios usando el delimitador -d de la siguiente manera:
echo "¡Hey! Geeks Welcome to Maketecheasier.com" | cut -d' ' -f5Omitiendo Ciertos Campos Durante la Extracción
Puedes excluir campos específicos mientras extraes texto de un archivo utilizando la opción --complement con el comando cut. Esta opción instruye al comando cut para que muestre todos los campos excepto los especificados:
cut -d',' -f1 mte.csv --complementEste comando omitirá la primera columna y devolverá el resto del contenido:
Cambiando el Delimitador por Defecto en la Salida
Por defecto, el comando cut preserva el delimitador de entrada en la salida al extraer campos. Sin embargo, puedes cambiar el delimitador de salida utilizando la opción --output-delimiter al trabajar con extracción basada en campos:
cut -d',' -f1-3 --output-delimiter='-' mte.csvEste comando utiliza el guion - como separador en la salida:
Usando cut con Otros Comandos Útiles de Linux
También puedes usar cut con otros comandos de Linux usando el símbolo de canalización. Por ejemplo, el siguiente comando extrae los primeros 5 caracteres de cada línea de la salida del comando who:
who | cut -c1-5En el siguiente ejemplo, usamos el comando cut junto con head para mostrar las primeras dos líneas del archivo “mte.csv” y extraer solo los campos empName y empDesig:
head -n2 mte.csv | cut -d',' -f2,3Gestionando Formatos de Datos Irregulares con el Comando cut de Linux
El comando cut funciona mejor cuando los datos están organizados de manera ordenada, con el mismo delimitador (como una coma o tabulador) separando cada parte. Pero si el archivo tiene espacios desiguales o delimitadores mixtos, cut puede no funcionar bien por sí solo. En tales situaciones, es útil limpiar primero los datos usando comandos como tr o sed para asegurarse de que cut pueda extraer las partes correctas.
Manejando Espacios Extras
Considera un archivo llamado “mteData.txt” donde los campos están separados por múltiples espacios, como se muestra a continuación:
cat mteData.txtDado que cut espera un solo delimitador consistente, podemos simplificar el espaciado usando tr antes de aplicar cut:
cat mteData.txt | tr -s ' ' | cut -d' ' -f1-2Este comando lee el contenido de “mteData.txt”, utiliza tr para reemplazar múltiples espacios con un solo espacio, y luego utiliza cut para extraer los primeros dos campos separados por espacio:
Manejando Delimitadores Mixtos
Si un archivo utiliza una combinación de espacios y comas como delimitadores, podemos normalizar el formato usando sed. Por ejemplo, un archivo llamado “mteData1.txt” contiene el siguiente contenido:
cat mteData1.txtVamos a usar el comando sed junto con el comando cut para reemplazar todos los espacios con una coma y luego extraer los primeros y terceros campos separados por comas:
sed 's/ /,/g' mteData1.txt | cut -d',' -f1,3Conclusión
En este artículo, exploramos el comando cut de Linux, un comando útil en Linux para extraer datos de archivos o entrada canalizada. Con su sintaxis simple, puedes fácilmente obtener caracteres, bytes o campos basados en un delimitador. También demostramos cómo usar el comando cut con otros comandos como tr, sed y head para gestionar datos desordenados y simplificar la salida. Ya sea que estés trabajando con archivos CSV, analizando registros o limpiando datos, el comando cut es una herramienta indispensable para el procesamiento de texto en sistemas similares a Unix.