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.