Tabla de Contenidos

cut

cut es un filtro que Corta una línea de texto.

Por ejemplo:

cut fichero -c12-19

…corta del caracter 12 al 19.

Si un fichero contiene múltiples columnas, y sólo necesitamos una de ellas, podremos usar:

cut -d',' -f2 filename

Por ejemplo, para extraer sólo la segunda columna usando una coma como separador:

cut -d',' -f2 ~/Escritorio/miembros.csv

También podríamos probar:

cut -d',' -f3 ~/Escritorio/miembros.csv
cut -d':' -f1 /etc/passwd
cut -d':' -f7 /etc/passwd
cut -c1-10 fichero.txt

Ejemplo: Ver hora

Uso de Cut

El comando cut ofrece varias opciones para extraer partes específicas de una línea. Cada opción se especifica para una manera en la cual se seleccionan los datos.

Por posición de bytes

La opción -b se usa para cortar desde posiciones de bytes específicas de cada línea de un fichero, y es útil para operar con datos de ancho fijo o ficheros donde cada posición de byte tiene un significado contemplado.

Los bytes pueden especificarse como:

Para extraer bytes específicos, y mostrar el primer, segundo y tercer byte (caracteres) de cada línea de fichero.txt, se usa

cut -b 1,2,3 fichero.txt

Sólo se presentarán los bytes seleccionados, sin rango alguno.

Extraer Bytes usando rangos específicos

Podremos extraer bytes usando rangos. Por ejemplo, para extraer caracteres de cada linea de fichero.txt desde la posición 1 a la 3, y luego desde la 5 a la 7, ingresaríamos:

cut -b 1-3,5-7 fichero.txt
Extraer bytes desde el comienzo al final de una línea

Para extraer todos los bytes desde el comienzo de una línea hasta el final.

cut -b 1- fichero.txt
Extraer bytes desde el comienzo hasta una posición específica

Para cortar bytes desde el primer byte de una línea hasta el tercer byte:

cut -b -3 state.txt

Extraer salida por posición de caracter

La opción -c (“columna”) del comando cut es la recomendada cuando tenemos que hacer tratamiento de ficheros de texto, puesto que extrae los caracteres de Unix. Podrá especificar un listado de posiciones de caracteres por medio de comas , o delimitando un rango con un guiónm -.

Los caracteres de tabulación y retroceder se tratan como caracteres únicos, y se requiere un listado de caracteres válidos para evitar errores.

La sintaxis es

cut -c [(k)-(n)/(k),(n)/(n)] filename

donde k denota la posición de comienzo del caracter y n denota la posición de finalización de caracter en cada línea si k y n están separados por un -; caso contrario, son tratados como la posición única de caracter en cada linea del fichero tomado como entrada.

Extraer caracteres específicos de cada línea

Para extraer y presentar los caracteres en las posiciones 2, 5, y 7 de cada línea de fichero.txt con el comando Cut se usa:

cut -c 2,5,7 fichero.txt
Cortar un rango de caracteres

Para extraer y presentar los primeros 7 caracteres de cada línea de fichero.txt:

cut -c 1-7 fichero.txt
Extraer caracteres desde el comienzo al final de la línea

Cut usa un formato especial para seleccionar caracteres desde el comienzo hasta el final de la línea, podemos proveer específicamente la posición de inicio, y omitir la posición final del corte.

Para extraer y mostrar el primer caracter de cada línea de fichero.txt:

cut -c 1- fichero.txt
Extraer caracteres desde el comienzo hasta una posición específica

Si queremos extraer caracteres desde el primer caracter de la línea hasta el quinto caracter:

cut -c -5 fichero.txt

Se ha omitido la posición de inicio y el comando imprime desde la posición de inicio hasta la posición final indicada.

Extraer salida por Campos

La opción -f (por “fields” o campos) se utiliza para cortar campos (encolumnados especificos de cada línea de un fichero), siendo estos grupos de caracteres separados por un delimitador.

Por defecto, se usa como delimitador un caracter de Tabulación (TAB), pero podremos usar la opción -d para especificar otro delimitador distinto, como caracter de espacio en blanco '' , caracter coma '', o caracter punto y coma ;.

El Espacio en blanco no se considera un delimitador en UNIX.

La sintaxis general es:

cut -d "delimiter" -f (número de campo) fichero.txt
Intentar extraer un Campo usando Delimitador por defecto

Este ejemplo muestra lo que sucede cuando se intenta extraer un campo sin definir limitador. Ayuda a los usuarios a comprender porqué es importante especificar uno con -d, de lo contrario el comando podría no funcionar como se lo desea.

cut -f 1 fichero.txt
Siempre especifique el delimitador con -d cuando su fichero no está separado por tabulaciones.
Extraer el Primer Campo usando Espacio en Blanco como caracter delimitador

Este ejemplo extrae sólo la primer columna (nombres de provincia) de un fichero separado por espacios en blanco. Es útil cuando queremos una columna específica de un texto estructurado.

Si se usa la opción -d " " se considera al caracter de espacio en blanco como un separador de campos o delimitador.

cut -d " " -f 1 fichero.txt
Extraer un Rango Continuo de Campos

Este ejemplo demuestra cómo extraer un gurpo de campos consecutivos. Es útil cuando los datos se reparten a lo largo de múltiples columnas que están juntas.

El comando devolverá desde el primer al cuarto campo de cada línea de fichero.txt

cut -d " " -f 1-4 fichero.txt

--complement: Invertir los campos o caracteres seleccionados

Esta opción se usa para revertir la selección realizada por las demás opciones, ya sea -f o -c. En lugar de presentar los campos o caracteres seleccionados, presenta los no seleccionados.

Remover el primer campo de cada línea

Si queremos remover la primer columna de cada fichero separado por espacios en blanco, e imprimir los campos restantes (puesto que la primer columna no se necesita en los procesamientos posteriores), podremos hacer:

cut --complement -d " " -f 1 fichero.txt
Remover una posición de caracter específica

Si deseamos remover un caracter de una posición específica de cada línea, para borrar caracteres de posición fija, tales como símbolos de formato:

cut --complement -c 5 fichero.txt

Cambiar el delimitador de campo de salida

La opción –output-delimiter es muy útil para dar formato a los datos en guiones, pues permite cambiar el caracter delimitador empleado en la salida (por defecto es el mismo que el delimitador de entrada especificado con -d). No modifica el fichero de entrada, y sólo opera cuando se usa en conjunto con la opción -f.

Si queremos cambiar el delimitador del espacio en blanco (utilizado normalmente) a % mientras extraemos los campos seleccionados.

cut -d " " -f 1,2 provincias.txt --output-delimiter='%'

Real-World Use Cases

A menudo el comando cut se combina con otros a través de caños (|). Esto permite extraer sólo la parte requerida de los datos y luego seguir procesándola.

1. Extraer una Columna y ordenarla

Si queremos extraer el primer campo (nombres de provincias) de un fichero separado por espacios y luego usar sort para ordenarlas alfabéticamente de forma inversa:

cat provincias.txt | cut -d ' ' -f 1 | sort -r
Extraer campos específicos de las primeras pocas líneas de un fichero

Si deseamos extraer datos únicamente de las primeras líneas de un fichero y guardar los resultados en otro, para previsualizar el procesamiento de ficheros enormes:

cat provincias.txt | head -n 3 | cut -d ' ' -f 1 > lista.txt

Luego vemos el resultado con:

cat lista.txt