file - repetidas - Encuentre líneas duplicadas en un archivo y cuente cuántas veces se duplicó cada línea?
quitar líneas duplicadas (7)
Esto solo imprimirá líneas duplicadas , con conteos:
sort FILE | uniq -cd
o, con opciones largas de GNU (en Linux):
sort FILE | uniq --count --repeated
en BSD y OSX tienes que usar grep para filtrar líneas únicas:
sort FILE | uniq -c | grep -v ''^ *1 ''
Para el ejemplo dado, el resultado sería:
3 123
2 234
Si desea imprimir recuentos para todas las líneas, incluidas las que aparecen solo una vez:
sort FILE | uniq -c
o, con opciones largas de GNU (en Linux):
sort FILE | uniq --count
Para la entrada dada, la salida es:
3 123
2 234
1 345
Para ordenar la salida con las líneas más frecuentes en la parte superior, puede hacer lo siguiente (para obtener todos los resultados):
sort FILE | uniq -c | sort -nr
o, para obtener solo líneas duplicadas, las más frecuentes primero:
sort FILE | uniq -cd | sort -nr
en OSX y BSD el último se convierte en:
sort FILE | uniq -c | grep -v ''^ *1 '' | sort -nr
Supongamos que tengo un archivo similar al siguiente:
123
123
234
234
123
345
Me gustaría saber cuántas veces se duplicó ''123'', cuántas veces se duplicó ''123'', etc. Así que, idealmente, la salida sería como:
123 3
234 2
345 1
Para buscar y contar líneas duplicadas en varios archivos, puede probar el siguiente comando:
sort <files> | uniq -c | sort -nr
o:
cat <files> | sort | uniq -c | sort -nr
Si alguien está buscando el sitio web en línea que hace el mismo trabajo:
Suponiendo que hay un número por línea:
sort <file> | uniq -c
También puede usar el indicador más detallado --count
con la versión GNU, por ejemplo, en Linux:
sort <file> | uniq --count
Suponiendo que tenga acceso a un shell estándar de Unix y / o un entorno cygwin:
tr -s '' '' ''/n'' < yourfile | sort | uniq -d -c
^--space char
Básicamente: convierta todos los caracteres de espacio a saltos de línea, luego ordene la salida en tranlsada y alimente eso a uniq y cuente líneas duplicadas.
Vía awk :
awk ''{dups[$1]++} END{for (num in dups) {print num,dups[num]}}'' data
En awk ''dups[$1]++''
, la variable $1
contiene todo el contenido de column1 y los corchetes son acceso de matriz. Por lo tanto, para cada primera columna de línea en data
archivo de data
, el nodo de la matriz denominada dups
se incrementa.
Y al final, hacemos un bucle sobre la matriz de dups
con num
como variable e imprimimos primero los números guardados y luego su número de valor duplicado por dups[num]
.
Tenga en cuenta que su archivo de entrada tiene espacios al final de algunas líneas, si los borra, puede usar $0
en lugar de $1
en el comando anterior :)
En Windows usando "Windows PowerShell" utilicé el comando mencionado a continuación para lograr esto
Get-Content ./file.txt | Group-Object | Select Name, Count
También podemos usar el cmdlet where-object para filtrar el resultado.
Get-Content ./file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count