script repetidas quitar lineas linea leer fichero extraer eliminar duplicados duplicadas contar condiciones condicion con cadena buscar shell unix text merge duplicate-removal

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