Cut (Unix)

De Wikipedia, la enciclopedia libre

cut es un comando usado para la extracción de segmentos (o porciones) de las líneas de texto, provenientes de un archivo o bien de la entrada estándar (stdin). Actualmente forma parte del paquete GNU coreutils y del Sistema Base de BSD. Su primera aparición fue en el UNIX System III en 1982.[1]

Se pueden determinar los segmentos de texto a extraer, indicándolos como un rango de alguna de las siguientes maneras:

  • Bytes (-b rango).
  • Caracteres (-c rango),
  • Campos (-f rango) separados por un delimitador (-d, donde el tabulador es el default).

El rango puede ser indicado usando alguno de los siguientes formatos: N, N-M, N- (desde N hasta el final de la línea), o -M (desde el comienzo de la línea hasta M), donde los valores de N y M comienzan a partir de 1, y N es menor que M. El comando cut permite indicar más de un rango, separando uno del otro, utilizando una coma (,): rango1,rango2,etc.


Modo de uso[editar]

La invocación del comando cut se realiza de la siguiente forma:

 cut opciones [ARCHIVO]

Donde las opciones son:

-b rango/s
Selecciona los bytes indicados en el o los rangos. También puede indicarse con el parámetro --bytes=rango/s.
-c rango/s
Selecciona los caracteres indicados en el o los rangos. También puede indicarse con el parámetro --characters=rango/s.
-f rango/s
Selecciona los campos (columnas) indicadas en el o los rangos, que se encuentran delimitadas por el carácter Tabulador. También puede indicarse con el parámetro --fields=rango/s. En caso de que una línea no posea el delimitador, esta se muestra en su totalidad, salvo que se utilice el parámetro -s.
-d caracter_delimitador
Especifica el carácter delimitador de los campos, en el caso de que se utilice el parámetro -f. Es posible indicarlo usando --delimiter=caracter_delimitador. En caso de que no se use dicho parámetro el tabulador actúa como delimitador por defecto.
-s
Indica que las líneas que no posean el delimitador (o separador) no sean mostradas.
--complement
Establece que los rangos indicados en alguna de las opciones -b, -c o -f no son deseados, por lo tanto se muestra el resto que se encuentra excluido.
--output-delimiter=cadena_de_texto
Indica que los campos, al ser mostrados en pantalla, sean separados por la cadena de texto indicada.

En cada invocación de cut, solo es posible elegir una de las maneras de segmentar las líneas de un texto. Esto limita al usuario a optar por un único parámetro entre los siguientes: -b, -c o -f.


Ejemplos[editar]

A continuación se listan una serie de ejemplos asumiendo que existe un archivo, llamado archivo.txt, con la siguiente información:

dato1:dato2:dato3:dato4
uno:dos:tres:cuatro:cinco:seis:siete
a:b:c:d:e:f:g:h:i:j:k
El sistema operativo Linux es muy productivo.

Para imprimir en pantalla desde el cuarto hasta el de vigésimo carácter de cada línea:

$ cut -c 4-20 archivo.txt

Y la salida correspondiente es:

o1:dato2:dato3:da
:dos:tres:cuatro:
:c:d:e:f:g:h:i:j:
sistema operativo


Para imprimir en pantalla el tercer y cuarto campo, delimitados por el signo ":" (dos puntos) y que los muestre separados por la cadena "; " (punto y coma junto a un espacio) :

$ cut -f 3-4 -d":" --output-delimiter="; " archivo.txt

Y la salida correspondiente es:

dato3; dato4
tres; cuatro
c; d
El sistema operativo Linux es muy productivo.

Nota: la última línea al no poseer el delimitador ":", es mostrada en su totalidad.


Para imprimir en pantalla desde el comienzo de la línea hasta el segundo campo, delimitados por el signo ":" (dos puntos) y que los muestre separados por la cadena " y ", sin incluir a los que no poseen delimitador :

$ cut -f -2 -d":" --output-delimiter=" y " -s archivo.txt

Y la salida correspondiente es:

dato1 y dato2
uno y dos
a y b


Para imprimir en pantalla todo, salvo el rango que va desde el comienzo de la línea hasta el tercer campo, así como también el sexto campo. Dichos campos son delimitados por un espacio, y del resultado que no se incluyan a los que no poseen delimitador:

$  cut --complement -f -3,6 -d" " -s  archivo.txt

Y la salida correspondiente es:

Linux es productivo.

Lo que se hizo en este último ejemplo fue: al indicar que se usa un espacio como delimitador, y agregar el parámetro -s (no incluir las líneas no delimitadas), estamos trabajando con la última línea del ejemplo. Luego se establecieron los rangos a extraer, pero con --complement, decimos que no son deseados, y por lo tanto muestra el resto.

Véase también[editar]

Referencias[editar]