cut
Extrae columnas o partes de cada línea de un archivo.
Toma cada línea de un archivo, la separa en pedazos usando un separador y muestra solo los pedazos que le pides. Sirve para archivos donde los datos vienen en columnas, como /etc/passwd o un CSV, sin tener que abrirlos en una hoja de cálculo.
cut OPCIÓN LISTA ARCHIVO...Despiece
6 ejemplosVer los usuarios del sistema
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | cut | Comando | El comando que corta una parte de cada línea. |
| 2 | -d | Opción | Delimiter: dice cuál es el separador entre campos. |
| 3 | : | Valor | El separador de /etc/passwd son los dos puntos, no el tabulador. |
| 4 | -f | Opción | Fields: dice qué campo quieres. |
| 5 | 1 | Valor | El primer campo de la línea, que en /etc/passwd es el nombre de usuario. |
| 6 | /etc/passwd | Argumento | El archivo del que tomas las líneas. |
Imprime solo los nombres de usuario del sistema, uno por línea: root, daemon, bin y así sucesivamente.
Ver usuario y shell a la vez
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | cut | Comando | El comando que corta una parte de cada línea. |
| 2 | -d | Opción | Delimiter: dice cuál es el separador entre campos. |
| 3 | : | Valor | El separador de dos puntos. |
| 4 | -f | Opción | Fields: la lista de campos que quieres. |
| 5 | 1,7 | Valor | Dos campos separados por coma: el 1 y el 7. Se conservan en el orden en que los pidas. |
| 6 | /etc/passwd | Argumento | El archivo del que tomas las líneas. |
Cada línea queda como nombre de usuario y shell, por ejemplo root:/bin/bash. Muy útil para ver de un vistazo qué usuarios tienen shell.
Ver quién tiene shell de verdad
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | cut | Comando | El comando que corta una parte de cada línea. |
| 2 | -d | Opción | Delimiter: el separador entre campos. |
| 3 | : | Valor | Los dos puntos de /etc/passwd. |
| 4 | -f | Opción | Fields: qué campos tomar. |
| 5 | 1,7 | Valor | El nombre de usuario y el shell. |
| 6 | /etc/passwd | Argumento | El archivo con las cuentas del sistema. |
| 7 | | | Operador | Pipe: la salida de cut entra a grep. |
| 8 | grep | Comando | Filtra las líneas para quedarse solo con las que te interesan. |
| 9 | /bin/bash | Valor | El texto que buscas: el shell de los usuarios que pueden iniciar sesión. |
Solo quedan los usuarios cuyo shell es /bin/bash. Los que tienen /usr/sbin/nologin o /bin/false, que son cuentas de servicio, quedan fuera.
Sacar una columna de un CSV
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | cut | Comando | El comando que corta una parte de cada línea. |
| 2 | -d | Opción | Delimiter: en los CSV el separador es la coma. |
| 3 | , | Valor | La coma, que en datos.csv separa nombre, edad y ciudad. |
| 4 | -f | Opción | Fields: qué campo tomar. |
| 5 | 2 | Valor | El segundo campo: la edad. |
| 6 | datos.csv | Argumento | El archivo del que tomas las líneas. |
Imprime la columna de las edades. El encabezado edad también sale, porque cut trabaja línea por línea sin saber qué es un encabezado.
Cortar por tabulador, que es el separador de siempre
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | cut | Comando | El comando que corta una parte de cada línea. |
| 2 | -f | Opción | Fields: qué campos tomar, usando el separador de omisión. |
| 3 | 1 | Valor | El primer campo de cada línea. |
| 4 | notas.txt | Argumento | Un archivo cuyas columnas están separadas con tabulador. |
Sale la primera columna de cada línea. Si el archivo no tiene tabuladores, cut no sabe dónde están las columnas y suelta las líneas enteras; agrega -s para que se salte las que no traen separador.
Cortar caracteres, sin separador de por medio
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | cut | Comando | El comando que corta una parte de cada línea. |
| 2 | -c | Opción | Characters: cuentan por posición en vez de por campo. |
| 3 | 1-5 | Valor | Del carácter 1 al 5. La numeración empieza en 1 y el guion indica el rango. |
| 4 | archivo.txt | Argumento | El archivo al que le quieres quitar todo lo que sobra a la derecha. |
Cada línea aparece recortada a sus primeros 5 caracteres. Funciona aunque el archivo no tenga ningún separador, porque aquí no importa dónde están las columnas sino cuántos caracteres te interesa ver.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| -d--delimiter=SEP | Cambia el separador de campos. Por omisión es el tabulador. |
| -f--fields=LISTA | Imprime los campos indicados: -f 1 el primero, -f 1,3 el primero y el tercero, -f 2- del segundo en adelante. |
| -c--characters=LISTA | Imprime caracteres o columnas contando desde el 1. -c 1-5 son los primeros cinco, útil cuando no hay separador. |
| -b--bytes=LISTA | Igual que -c pero por bytes. Ojo: los acentos y los emojis ocupan más de un byte y se pueden cortar a la mitad. |
| -s--only-delimited | No imprime las líneas que no traen el separador. Sin esta opción, cut suelta esas líneas enteras. |
| --output-delimiter=TEXTO | Pone otro separador en la salida, por ejemplo un espacio o un punto y coma. |
| --complement | Invierte la selección: imprime todo lo que no esté en la lista. Con -f --complement quitas las columnas que le digas. |
Fallas comunes
| Falla | Remedio |
|---|---|
| Contar los campos desde 0, como cut -f 0. | La numeración empieza en 1. Con -f 0 cut se detiene con el error fields are numbered from 1; el primer campo es -f 1. |
| Usar -f sin -d en un archivo separado por comas y ver el archivo completo. | El separador de omisión de cut es el tabulador. Como el archivo usa comas, cut no encuentra campos y devuelve cada línea entera. Agrega -d , y con -s para que se salte las líneas sin comas. |
| Combinar -f y -c en el mismo comando. | cut responde cut: only one list may be specified. Solo se puede usar una de las tres listas: -f para campos, -c para caracteres o -b para bytes. |
| Intentar cortar una columna en un texto que no tiene separadores. | cut no adivina dónde empieza una columna. Si el texto está alineado con espacios, usa -c con el rango de columnas que te interesa, o recurre a awk y sed, que sí pueden buscar patrones. |
Preguntas frecuentes
- ¿Cómo veo los nombres de usuario del sistema?
- Con cut -d : -f 1 /etc/passwd. El -d : le dice que el separador son los dos puntos de ese archivo y el -f 1 que quieres el primer campo, que es el nombre de usuario.
- ¿Cuál es la diferencia entre -f y -c en cut?
- -f corta por campos, o sea por pedazos separados con un delimitador, y necesita -d para saber cuál es. -c corta por posición: cuántos caracteres o columnas tomar, sin importar qué haya entre ellos. Con -f 1 y -d , tomas el primer campo; con -c 1-5 tomas los primeros cinco caracteres de cada línea.
- ¿Cómo saco la segunda columna de un CSV?
- Con cut -d , -f 2 archivo.csv. La coma es el separador y el 2 es la columna que quieres. Ojo: cut no distingue el encabezado de los datos, así que también te imprime la línea de encabezados.
- ¿Por qué cut me imprime el archivo completo?
- Lo más probable es que falte el -d con el separador correcto. cut usa el tabulador por omisión, y si tu archivo usa comas o dos puntos no encuentra ningún campo y devuelve cada línea sin recortar. Agrega -d , o -d : según el archivo.
- ¿Cómo quito una columna en vez de sacarla?
- Con --complement: cut -d , -f 2 --complement datos.csv imprime todas las columnas menos la segunda.