valores sort repetidos repetidas lineas duplicadas contar comando buscar bash command-line sorting count duplicates

bash - sort - contar duplicados en una secuencia ordenada utilizando herramientas de línea de comando



contar valores repetidos excel (5)

En Bash, podemos usar una matriz asociativa para contar instancias de cada valor de entrada. Suponiendo que tenemos el comando $cmd1 , por ejemplo

#!/bin/bash cmd1=''printf %d/n 100 99 26 25 100 24 100 24 99''

Entonces podemos contar valores en la variable de matriz a usando el operador matemático ++ en las entradas de matriz relevantes:

while read i do ((++a["$i"])) done < <($cmd1)

Podemos imprimir los valores resultantes:

for i in "${!a[@]}" do echo "$i ${a[$i]}" done

Si el orden de salida es importante, es posible que necesitemos un sort de claves externas:

for i in $(printf ''%s/n'' "${!a[@]}" | sort -nr) do echo "$i ${a[$i]}" done

Tengo un comando (cmd1) que greps a través de un archivo de registro para filtrar un conjunto de números. Los números están en orden aleatorio, así que utilizo sort -gr para obtener una lista ordenada inversa de números. Puede haber duplicados dentro de esta lista ordenada. Necesito encontrar el conteo de cada número único en esa lista.

Por ejemplo, si la salida de cmd1 es:

100 100 100 99 99 26 25 24 24

Necesito otro comando al que pueda conectar el resultado anterior, de modo que obtengo:

100 3 99 2 26 1 25 1 24 2


Ordene numéricamente los números en orden inverso, luego cuente los duplicados, luego cambie las palabras izquierda y derecha. Alinear en columnas

printf ''%d/n'' 100 99 26 25 100 24 100 24 99 / | sort | uniq -c | sort -nr | awk ''{printf "%-8s%s/n", $2, $1}''

100 3 99 2 26 1 25 1 24 2


qué tal si;

$ echo "100 100 100 99 99 26 25 24 24" | tr " " "/n" | sort | uniq -c | sort -k2nr | awk ''{printf("%s %s ",$2,$1)}END{print}'' 100 3 99 2 26 1 25 1 24 2


si el orden no es importante

# echo "100 100 100 99 99 26 25 24 24" | awk ''{for(i=1;i<=NF;i++)a[$i]++}END{for(o in a) printf "%s %s ",o,a[o]}'' 26 1 100 3 99 2 24 2 25 1


uniq -c funciona al menos para GNU uniq 8.23, y hace exactamente lo que usted desea (suponiendo que la entrada esté ordenada).