martes, 23 de noviembre de 2010

Buscando campos únicos en archivos separados por caracteres (Ej. CSV)

El comando uniq me devuelve, para un conjunto generalmente ordenado previamente (ver: sort), un listado de líneas únicas. Inclusive me puede ayudar a contar el número de coincidencias.

¿El problema? Cuando tengo un archivo con campos separados por caracteres, como un CSV, ¿cómo hago para pedirle sólo únicos para determinados campos del archivo? Pues como Master Card, para todo lo demás AWK ;-)

$ cat a
1|1|2
1|2|3
1|1|5
2|6|7
$ awk -F '|' '!x[$1]++' a
1|1|2
2|6|7
$ awk -F '|' '!x[$1,$2]++' a
1|1|2
1|2|3
2|6|7

Fíjese que para el archivo "a" con campos separados por tuberías "|" extraigo los caracteres únicos, primero considerando el primer campo y luego considerando los primeros dos, Esto no podría hacerse fácilmente con uniq porque tendría que utilizar la vaga y precaria función -skip-chars.


No hay comentarios:

Publicar un comentario