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 espećificos 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 state.txt

Extract specific characters Extract specific characters

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
  Default delimiter is TAB
  Since state.txt is space-separated, no field split occurs
  Entire line is printed instead of a single field

Extract first field using -f option Extract first field using -f option

Siempre especifique el delimitador con -d cuando su fichero no está separado por tabulaciones.
Extraer el Primer Cmapo usando Espacio en Blanco como 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

1 –complement

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 caracters de posición fija, tales como símbolos de formato:

cut --complement -c 5 fichero.txt

5. --output-delimiter: Change the Output Field Separator

The –output-delimiter option is used to change the delimiter used in the output. By default, the output delimiter is the same as the input delimiter specified using -d.

  Works only when using the -f option
  Does not modify the input file
  Affects only how data is displayed on the terminal
  Very useful for data formatting in scripts

Example: Change Output Delimiter to a Custom Symbol

This example changes the output delimiter from space to % while extracting selected fields. It helps when you want the output in a specific format.

cut -d " " -f 1,2 state.txt --output-delimiter='%'
  1. d “ ”: tells the cut command that fields in the file are separated by spaces.
  2. f 1,2: selects the first and second fields from each line.

By default, these two fields would be printed with a space between them.

  1. -output-delimiter='%': changes this space into a percent (%) symbol in the output.

The original file remains unchanged, only the displayed output is formatted differently.

2024-02-16_13-18

6. Display Version (--version) Using cut Command

–version: This option is used to display the version of cut which is currently running on your system.

cut --version

display version of cut command display version of cut command

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 en orden alfabético inverso:

cat provincias.txt | cut -d ' ' -f 1 | sort -r
  cat state.txt: displays the content of the file.
  cut -d " " -f 1: extracts only the first field (state names).
  sort -r: sorts the extracted names in reverse alphabetical order.
  The final output shows only sorted state names.

1 using tail with pipe (|) in cut command

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 list.txt