Tengo un archivo de texto con unas 1,200 filas. Algunos de ellos son duplicados.
¿Cómo podría encontrar las líneas duplicadas en el archivo (pero sin preocuparme por el caso) y luego imprimir el texto de la línea en la pantalla, para poder ir y encontrarlo? No quiero eliminarlos ni nada, solo encontrar qué líneas pueden ser.
Esto es bastante fácil con un set:
with open('file') as f: seen = set() for line in f: line_lower = line.lower() if line_lower in seen: print(line) else: seen.add(line_lower)
Como solo hay 1200 líneas, también puedes usar collections.Counter()
:
>>> from collections import Counter >>> with open('data1.txt') as f: ... c=Counter(c.strip().lower() for c in f if c.strip()) #for case-insensitive search ... for line in c: ... if c[line]>1: ... print line ...
Si data1.txt
es algo como esto:
ABC abc aBc CAB caB bca BcA acb
la salida es:
cab abc bca
Esto no le dará números de línea, pero le dará una lista de líneas duplicadas que luego puede investigar más a fondo. Por ejemplo:
tr 'AZ' 'az' < /tmp/foo | sort | uniq -d
# /tmp/foo one One oNe two three
El ducto listado arriba producirá correctamente:
uno
A continuación, puede grep para los números de línea relacionados de esta manera:
grep --ignore-case --line-number one /tmp/foo