Eliminar líneas duplicadas de un archivo de texto es una tarea común en scripts Bash. Este artículo explora dos métodos eficientes: usar sort
y uniq
, y aprovechar el poder de awk
.
Tabla de Contenido
Usando sort
y uniq
Este enfoque combina dos utilidades fundamentales de Unix para una solución sencilla. sort
ordena las líneas alfabéticamente, un prerrequisito para uniq
, que luego elimina los duplicados consecutivos. Se conserva el orden de la primera ocurrencia de cada línea.
Aquí está el comando:
sort file.txt | uniq > file_unique.txt
Esto envía la salida ordenada de file.txt
a uniq
, guardando las líneas únicas en file_unique.txt
. El archivo original permanece intacto.
Ejemplo:
Si file.txt
contiene:
apple
banana
apple
orange
banana
grape
file_unique.txt
contendrá:
apple
banana
grape
orange
Usando el comando awk
awk
ofrece una solución más flexible y potente, particularmente útil cuando es crucial preservar el orden original de las líneas. Emplea una matriz asociativa para rastrear las líneas encontradas.
El comando es notablemente conciso:
awk '!seen[$0]++' file.txt > file_unique.txt
Desglosémoslo:
$0
representa toda la línea actual.seen[$0]
accede a un elemento en la matrizseen
, usando la línea como clave.++
incrementa posteriormente el valor (inicialmente 0).!
niega el resultado; la línea se imprime solo si se encuentra por primera vez (cuandoseen[$0]
es 0).
Este método mantiene el orden original de las líneas.
Ejemplo:
Usando el mismo file.txt
, la salida en file_unique.txt
será:
apple
banana
orange
grape
Conclusión:
Ambos métodos eliminan eficazmente las líneas duplicadas. sort | uniq
es más simple para escenarios básicos, mientras que awk
proporciona una flexibilidad y un control superiores, especialmente para preservar el orden original o manejar necesidades más intrincadas de eliminación de duplicados.