Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

207
Vistas
Encuentre las n ocurrencias más grandes de valores duplicados en una columna

Tengo un archivo csv de 7 GB del que necesito encontrar los primeros n valores que ocurrieron principalmente en la quinta columna. El formato de mi archivo es el siguiente:

 "instance id","src IP","destination ip","63812","389" "instance id","src IP","destination ip","389","65311" "instance id","src IP","destination ip","63812","389" "instance id","src IP","destination ip","88","49194" "instance id","src IP","destination ip","12489","49194" "instance id","src IP","destination ip","63812","389" "instance id","src IP","destination ip","63812","389"

Usando el siguiente comando awk -F , ' !count[$5]++ {save[$5] = $0; next} count[$5] > 0 { print save[$5] " is " count[$5] " times"} ' example.csv capaz de encontrar el siguiente resultado

 "instance id","src IP","destination ip","63812","389" is 1 times "instance id","src IP","destination ip","389","65311" is 1 times "instance id","src IP","destination ip","63812","389" is 2 times "instance id","src IP","destination ip","88","49194" is 1 times "instance id","src IP","destination ip","12489","49194" is 2 times "instance id","src IP","destination ip","63812","389" is 3 times "instance id","src IP","destination ip","63812","389" is 4 times

pero no puedo entender cómo obtener las 50 filas principales en las que la entrada de la quinta columna se duplicó la mayor parte del tiempo.

Supongamos que si n=2, entonces mi resultado debería ser el siguiente:

 "instance id","src IP","destination ip","63812","389" is 4 times "instance id","src IP","destination ip","12489","49194" is 2 times
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si yo fuera tú, alteraría la salida en algo como:

 1 times : "instance id","src IP","destination ip","63812","389" is 1 times 1 times : "instance id","src IP","destination ip","389","65311" is 1 times 2 times : "instance id","src IP","destination ip","63812","389" is 2 times 1 times : "instance id","src IP","destination ip","88","49169" is 1 times 2 times : "instance id","src IP","destination ip","12489","49194" is 2 times 3 times : "instance id","src IP","destination ip","63812","389" is 3 times 4 times : "instance id","src IP","destination ip","63812","389" is 4 times

Y luego agrega | sort -n después de su comando.

(He estado intentando usar sort -kx -n pero la combinación de comillas dobles, comas y espacios estropea el -k del comando sort ).

over 4 years ago · Santiago Trujillo Denunciar

0

Usando cualquier sort+awk+head:

 $ sort -t, -k5,5 file | awk ' BEGIN { FS=OFS="," } $5 != p5 { if (NR>1) print p0, cnt; p5=$5; p0=$0; cnt=0 } { cnt++ } END { print p0, cnt }' | sort -t, -k6,6rn | head -2 "instance id","src IP","destination ip","63812","389",4 "instance id","src IP","destination ip","12489","49194",2
over 4 years ago · Santiago Trujillo Denunciar

0

Si no necesita usar awk , la herramienta de línea de comandos GoCSV tiene una serie de subcomandos para obtener los primeros n valores únicos para una columna, ordenados y seleccionados por el recuento de esos valores.

GoCSV espera un encabezado, por lo que para su entrada, el primer paso es agregar algunos nombres de columna predeterminados (que se pueden eliminar más adelante):

 gocsv cap -default-name 'Col' input.csv

Con un encabezado en su lugar, puede canalizar esa salida a una serie de comandos que:

  • solo mantenga los valores únicos de la quinta columna mientras agrega el recuento de cuántas veces se vieron los valores
  • ordenar descendiendo por el conteo (una nueva sexta columna de uniq )
  • luego manteniendo solo 50 filas (los "50 mejores recuentos")
 ... \ | gocsv uniq -c 5 -count \ | gocsv sort -c 6 -reverse | gocsv head -n 50

Ejecutando todo lo que obtengo:

 Col 1,Col 2,Col 3,Col 4,Col 5,Count instance id,src IP,destination ip,63812,389,4 instance id,src IP,destination ip,88,49194,2 instance id,src IP,destination ip,389,65311,1

Para deshacerse del encabezado, simplemente canalícelo en gocsv behead .

Está preconstruido para una serie de plataformas/OS-es .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda