Tutoriel Linux

Recorte en Linux: extracción de una columna sin usar artillería pesada

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

¿Tienes un archivo CSV, la salida de un comando o un archivo de registro, y solo quieres recuperar una columna sin escribir un script completo? Para eso precisamente sirve [esta herramienta]. cortarEl proceso de pedido es sencillo, rápido y muy práctico cuando el formato inicial está limpio.

En esta guía, te mostraré cómo usar cortar con un delimitador, ¿cómo se extraen caracteres específicos y, especialmente, en qué casos es mejor cambiar a awk O sed. cortar Corta muy bien, pero no detecta archivos con formato incorrecto.

¿Cuál es el propósito de la función `cut` en Linux?

cortar Lee cada línea y luego conserva solo la parte solicitada. Puedes trabajar carácter por carácter con -do, por byte con -bo por campos con -FEn la práctica, es mayormente -F con -d ¿Cuál es el más útil?

cortar -d ':' -f 1 /etc/passwd

Aquí, -d ':' indica que los campos están separados por dos puntos. -f 1 solicita el primer campo. En /etc/passwdAquí se muestran los nombres de las cuentas locales.

Antes de usar cortar Al examinar un archivo del sistema, comience mostrando algunas líneas. Esto le impedirá sacar conclusiones basándose en un formato que no ha verificado.

head -5 /etc/passwd

Extracción de una columna con un delimitador

La sintaxis más útil tiene este aspecto:

cortar -d 'DELIMINADOR' -f NÚMERO DE ARCHIVO

Ejemplo con un archivo CSV muy simple:

usuarios de gatos.csv
nombre, correo electrónico, cargo
Alice, [email protected], administrador
marc,[email protected],lectura

Para extraer la segunda columna:

cortar -d ',' -f 2 usuarios.csv

Resultado esperado:

correo electrónico
[email protected]
[email protected]

También puede solicitar varios campos:

cortar -d ',' -f 1,3 usuarios.csv

O una playa:

cortar -d ',' -f 1-2 usuarios.csv

Atención : cortar Cuenta los campos desde 1, no desde 0. Es una tontería, pero es una fuente clásica de errores al cambiar de un lenguaje de scripting a un comando de shell.

Trabajando en la salida de un pedido

cortar Se vuelve interesante con una tubería. Ejemplo simple: recuperar solo nombres de usuario locales de /etc/passwd.

cat /etc/passwd | cut -d ':' -f 1

Podemos escribir más corto sin gato :

cortar -d ':' -f 1 /etc/passwd

Otro ejemplo: extraer puntos de montaje de una salida limpia de df.

df -h --output=source,pcent,target | tail -n +2

En este caso específico, cortar no es la mejor opción, ya que las columnas están alineadas con espaciado variable. Para este tipo de salida, awk suele ser más fiable:

df -h --output=source,pcent,target | awk 'NR>1 {print $2, $3}'

Este es el límite que hay que recordar: cortar Funciona muy bien cuando el separador está limpio y estable. Si el espaciado varía según la longitud de la columna, no lo fuerce.

Extraer caracteres específicos

Con -doPuedes extraer las posiciones de los caracteres. Esto resulta útil para archivos de ancho fijo o para comprobar rápidamente un prefijo.

echo "prod-server-01" | cut -c 1-7

Resultado :

servidor

Algunas formas útiles:

cortar -c 1-5 archivo.txt
cortar -c 8- archivo.txt
cortar -c -10 archivo.txt

El primer comando conserva los caracteres del 1 al 5. El segundo conserva el carácter 8 hasta el final. El tercero conserva el carácter 10 desde el principio hasta el carácter 10.

Los inconvenientes de los archivos CSV y los espacios

El error más común tiene que ver con archivos CSV reales. Si una columna contiene una coma entre comillas, cortar No entiende la lógica de los archivos CSV. Sigue dividiéndolos en cada coma.

nombre, comentario
Alice, "administrador, acceso completo"

En este ejemplo, cortar -d ',' -f 2 Esto no dará un resultado fiable. Para obtener un archivo CSV auténtico, utilice una herramienta que pueda leer el formato, como Python, Miller, csvkit o un procesador adaptado a su entorno.

Otro escollo: el separador predeterminado de cortar Para los campos, el delimitador es una tabulación, no un espacio. Si está probando un comando con espacios, especifique el delimitador explícitamente.

echo "web01 prod activo" | cut -d ' ' -f 2

Este comando regresa producciónPero si la línea contiene varios espacios consecutivos, cortar También cuenta los campos vacíos. De nuevo, awk a menudo se vuelve más limpio.

Un ejemplo útil utilizando registros

En un servidor, puedes combinar diarioctl, grep Y cortar para aislar una parte de una línea. Un ejemplo deliberadamente simple: recuperar las primeras columnas de tiempo de una exportación.

journalctl -u ssh -n 20 --no-pager | cut -d ' ' -f 1-3

Este no es un análisis completo del registro, pero puede ser suficiente para verificar rápidamente los tiempos o preparar un informe breve para copiar en un ticket. Para un diagnóstico más completo, he detallado el uso de journalctl en el último arranque de Linux.

¿Cuándo debería cambiar a awk en lugar de cut?

Usar cortar Cuando el archivo es simple: separador único, columnas estables, necesidad de velocidad. Cambiar a awk cuando necesite filtrar, calcular, ignorar filas, manejar espacios variables o aplicar una condición.

# corte es suficiente
cortar -d ':' -f 1 /etc/passwd

#awk se vuelve más útil
awk -F ':' '$3 >= 1000 {print $1}' /etc/passwd

la documentacion de cortar(1) detalla las opciones disponibles. Para uso diario, recuerde sobre todo -d, -F Y -do.

Mi regla simple: si puedes explicar el fallo en una sola frase, cortar Probablemente sea suficiente. Si empiezas a añadir excepciones en tu cabeza, tómalo directamente. awk o un guion de verdad. Perderás menos tiempo.

sudo apt update && sudo apt upgrade