Excluir campos con cut

Normalmente usamos cut para extraer un único campo. Por ejemplo, si queremos extraer la primera palabra, siendo el espacio en blanco el delimitador de las palabras usamos los modificadores -d » « para indicar cuál es el delimitador y -f 1 para indicar que queremos el primer campo:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 1
Salió

Si no queremos la primera palabra, sino la última, y no sabemos el número exacto del campo de esta última palabra, podemos filtrar con rev la cadena y volver a filtrar con rev el resultado:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | rev | cut -d " " -f 1 | rev 
hociquirromo

Veamos el por qué de este doble uso de rev.

Con rev cambia el orden de principio a fin de la cadena:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | rev 
omorriuqicoh ,ograliloc ,onacibrab nótar nu óilaS

Así que si sólo filtramos con rev una vez, los devuelve la última palabra, pero con el orden invertido:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | rev | cut -d " " -f 1
omorriuqicoh

Ya sabemos cómo extraer un campo concreto, pero, ¿qué pasa si lo que queremos es excluir ese campo y que muestre todo lo demás? Deberemos indicar en lugar de un campo concreto, como -f 1, indicar un rango. Si queremos desde el campo 2 hasta el final, usaremos -f 2-:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2-
un ratón barbicano, colilargo, hociquirromo

Si no indicamos final del rango, extrae desde el campo indicado hasta el final de la cadena. Lo mismo, pero al revés, si no indicamos comienzo del rango:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f -4
Salió un ratón barbicano,

Podemos indicar el comienzo y el final del rango y cut sólo extrae las palabras que forman parte de ese rango:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2-5
un ratón barbicano, colilargo,

O podemos indicar determinados campos separados por comas y cut sólo extrae esas palabras:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2,5
un colilargo,

Y si queremos excluir al comienzo y al final, podemos filtrar este resultado con rev. Veamos cómo eliminar la primera y la última palabra:

$ echo "Salió un ratón barbicano, colilargo, hociquirromo" | cut -d " " -f 2- | rev | cut -d " " -f 2- | rev
un ratón barbicano, colilargo,

 

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.