shell - repetidas - combinar mĂșltiples archivos de texto y eliminar duplicados
quitar duplicados excel (1)
Tengo alrededor de 350 archivos de texto (y cada archivo tiene alrededor de 75MB). Intento combinar todos los archivos y eliminar las entradas duplicadas. El archivo está en el siguiente formato:
ip1,dns1
ip2,dns2
...
Escribí un pequeño script de shell para hacer esto
#!/bin/bash
for file in data/*
do
cat "$file" >> dnsFull
done
sort dnsFull > dnsSorted
uniq dnsSorted dnsOut
rm dnsFull dnsSorted
Estoy haciendo este procesamiento a menudo y me preguntaba si podría hacer algo para mejorar el procesamiento la próxima vez cuando lo ejecute. Estoy abierto a cualquier lenguaje de programación y sugerencias. ¡Gracias!
En primer lugar, no estás usando toda la potencia del cat
. El ciclo puede ser reemplazado por solo
cat data/* > dnsFull
asumiendo que el archivo está inicialmente vacío.
Luego están todos esos archivos temporales que obligan a los programas a esperar discos duros (comúnmente las partes más lentas en los sistemas informáticos modernos). Use una tubería:
cat data/* | sort | uniq > dnsOut
Esto sigue siendo un desperdicio, ya que solo el sort
puede hacer lo que está usando cat
y uniq
; todo el script puede ser reemplazado por
sort -u data/* > dnsOut
Si esto aún no es lo suficientemente rápido, entonces tenga en cuenta que la ordenación toma O (n lg n) tiempo mientras que la deduplicación se puede hacer en tiempo lineal con Awk:
awk ''{if (!a[$0]++) print}'' data/* > dnsOut