¿Cómo puedo encontrar líneas duplicadas en un archivo de texto e imprimirlas?

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 

Encontrar duplicados insensibles a mayúsculas y minúsculas

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 

Ejemplo de archivo de datos

 # /tmp/foo one One oNe two three 

El ducto listado arriba producirá correctamente:

uno

Encontrar los números de línea

A continuación, puede grep para los números de línea relacionados de esta manera:

 grep --ignore-case --line-number one /tmp/foo