martes, 2 de julio de 2013

[Shell] cut tutorial Linux

En esta ocasión veremos este comando de la shell de tipo ejecutable (type cut),el cual nos sirve para hacer filtrado de información basado en delimitadores,y columnas,este comando se puede comparar con algunas funciones de lenguajes de programación como split,explode,map,etc el cual nos maneja datos a partir de un delimitador:

En Perl:

#!/usr/bin/env perl

my @delim = split(":","http://www.itimetux.com");

foreach my $d (@delim)
{
    print "$d\n";
}

Lo que hace ese codigo es crear un arreglo basado en el delimitador :,osea crea dos :

1 . http
2 . //www.itimetux.com

Y el : no lo muestra

En Php se puede con explode,en ruby con split,etc,pero aquí lo importante es hacerlo con cut para ejecutarlo en Tuberias Unix,veamos un ejemplo:

Primero que nada necesitamos saber para que sirve exactamente cut de Unix,si creen que es como cortar y pegar de un explorador de archivos,no lo es si lo que queremos es cortar y pegar un archivo el equivalente seria en Unix mv:

mv archivo ruta_archivo
cut es una herramienta de filtrado de texto basado en delimitadores y especificadores de caracteres o bytes.

Por ejemplo tenemos el comando date que nos muestra el tiempo:

date
Ahora con una tuberia usando cut mostramos l fecha basado en el delimitador espacio:

date | cut -d " " -f 5
Bien que hicimos aquí?

No de hice copy and paste :P

Lo que hicimos fue dividir la salida de date(stdout) con cut basado en el delimitador espacio(" "), esto no lo devuelve en columnas los cuales consultamos con el argumento -f, por ejemplo en ese ejemplo tenemos 7 f(fields)

f1 f2 f3 f4 f5 f6 f7mar jul  2 18:50:41 CDT 2013
Ojo,devuelve columnas aquí si nos muestra solo un valor es porque solo es una linea:


Veamos otro ejemplo:

Llenamos un archivo de texto con el date unas cuantas veces y usamos el mismo comando:

for i in {1..5}; do date >> date.txt; done

cut -d " " -f 5 date.txt
Muestra lo mismo pero en todas las columnas:


Como se arregla esto?

Esto lo podemos arreglar con un pipe usando sed,pero ese ya es otro asunto,ahora a la explicación de cut:

Primero que nada y después de esto tenemos que ver siempre la ayuda del comando con el parámetro help,que trae todo lo que les voy a comentar y mas:

cut --help

Bien,primero que nada debemos saber que se hace con los comandos que acabamos de usar:

-d # Es un delimitador el cual se basa en un solo caracter,en este caso usamos el caracter "/",debe ir entre comillas para evitar problemas con caracteres como \ o ;.

 -f # Nos muestra las columnas creadas por el delimitador,se puede usar con un solo numero como (-f 1),o con rango como (-f 1-5) , que nos mostraría de la columna 1 a la 5 o solo la columna 1 y 5(-f 1,5).

Lo contrario es usar el parámetro (--complement),este parámetro nos indica que lo que queremos ver es lo que no indicamos con el parámetro f,también el parámetro (-s) nos muestra las columnas que no contengan el delimitador.

Los parámetros -c y -b nos muestran los caracteres y los bytes basados en rangos o en un solo numero,por ejemplo mostrar los 5 primeros caracteres:


Eso es todo,es lo mas importante(en mi opinión) y para ver mas info:

man cut && cut --help | less





1 comentario:

Los comentarios serán revisados antes de ser publicados.