Ayuda a la edición

cut

Supongamos que queremos saber cuántas personas de nuestro listado de teléfonos se apellidan ‘Luis’. Podemos utilizar el comando grep como hemos visto con anterioridad para seleccionar las líneas que contienen esta cadena, pero como resultado obtendremos todas las apariciones de ‘Luis’ del listado, no sólo los apellidos.

Para reproducir este ejemplo, copia el fichero telefonos.txt a otro fichero en el mismo directorio llamado telefonos2.txt. Utiliza vi para modificar la entrada correspondiente a ‘Mateo Guerricer’ como ‘Mateo Luis’.

$ grep Luis telefonos2.txt
 Luis Terreros 5553251
 Mateo Luis 5559082
 Luis Terico 5550255

Sería muy útil poder filtrar el contenido del fichero de forma que únicamente nos proporcionara los apellidos. O dicho de otra forma, que pudiéramos obtener únicamente la segunda columna.

El comando cut nos permite realizar este tipo de funciones. Este comando divide cada línea en columnas a partir de un separador dado mediante la opción -d. Combinada con la opción -f seguida del número de columna, podemos obtener el resultado deseado.

$ cut -d" " -f2 telefonos2.txt
 Terreros
 Luis
 Pellon
 Terico
 Calzado

En este ejemplo hemos especificado entre comillas un espacio como separador y obtenido la segunda columna. Ahora, sólo queda conectar esta salida con grep y la opción de contar apariciones:

$ cut -d" " -f2 telefonos2.txt | grep -c Luis
 1

tr

Este comando es un filtro «traductor» que lee caracteres de la entrada estándar y elimina o sustituye los que cumplen un cierto patrón. El esquema de uso general es el siguiente:

tr <modificación>

Para reproducir el siguiente ejemplo, utiliza vi para añadir al final de cada entrada de la lista contenida en telefonos2.txt las siguientes fechas de nacimiento con el mismo formato y orden:
08-02-1970
04-08-1964
06-09-1972
09-06-1968
12-07-1968

Imaginemos que queremos incluir estos datos en una base de datos que requiere que el formato de las fechas utilice el separador ‘/’ en lugar del guión. Podemos utilizar el comando tr para hacerlo de la siguiente forma:

$ tr "-" "/" < telefonos2.txt

Es importante fijarse en que la entrada de este comando no se puede especificar como parámetro sino que debe venir por la entrada estándar, por lo que hemos tenido que utilizar la redirección para utilizarlo.

El comando tr permite especificar grupos de caracteres durante la sustitución. En ejemplos anteriores hemos visto el uso de [:upper:] y [:lower:] para representar mayúsculas y minúsculas respectivamente. Siguiendo con el ejemplo anterior, podemos suponer que existe otro requerimiento que nos obliga a separar las columnas con comas en lugar de blancos. Para solucionarlo podemos hacer lo siguiente:

$ tr [:blank:] "," < telefonos2.txt

Aquí usamos [:blank:] para indicar cualquier espacio en blanco o tabulador. Los resultados de todos estos ejemplos se muestran por pantalla, pero es posible redireccionarlos a su vez a un fichero.