Foros del Web » Administración de Sistemas » Unix / Linux »

[SOLUCIONADO] Contar el número de registros diferentes en un campo

Estas en el tema de Contar el número de registros diferentes en un campo en el foro de Unix / Linux en Foros del Web. Hola, Buen día. Tengo un archivo *.txt con 50 mil lineas aprox. dividido por "|" lo que necesito es contar el número de registros diferentes ...
  #1 (permalink)  
Antiguo 14/07/2014, 18:28
 
Fecha de Ingreso: junio-2014
Ubicación: Mexico
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Hola,
Buen día.

Tengo un archivo *.txt con 50 mil lineas aprox. dividido por "|" lo que necesito es
contar el número de registros diferentes en un campo (similar a select count(distinct campo en SQL))

He intentado hacerlo con awk

Pero me muestra la LISTA del campo 6, pero requiero que me "cuente" cuantos hay de cada valor.

Código unix:
Ver original
  1. He intentado lo siguiente:
  2.  
  3. awk -FS"|" ($6=="8") |wc -l
  4. awk -FS"|" ($6=="7") |wc -l
  5. awk -FS"|" ($6=="6") |wc -l

Última edición por BrujoNic; 14/07/2014 a las 21:20
  #2 (permalink)  
Antiguo 15/07/2014, 09:43
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Contar el número de registros diferentes en un campo

para hacerlo solamente con awk, podés hacer algo como esto

Código BASH:
Ver original
  1. awk -F'|' '
  2.        BEGIN {
  3.                n6 = 0;
  4.                n7 = 0;
  5.                n8 = 0;
  6.        }
  7.        $6~/6/ {
  8.                n6 += 1;
  9.        }
  10.        $6~/7/ {
  11.                n7 += 1;
  12.        }
  13.        $6~/8/ {
  14.                n8 += 1;
  15.        }
  16.        END {
  17.                print 'ocurrencias de 6: ' n6;
  18.                print 'ocurrencias de 7: ' n7;
  19.                print 'ocurrencias de 8: ' n8;
  20.        }
  21. '

Con AWK podés usar vectores asociativos, lo que te permitiría iterar sobre cada línea, "preguntar" si el valor en el campo 6 ya está en el vector, y si es así, incrementar (de lo contrario, crear con valor 0). Usando el bloque END podés imprimir cada valor en el vector.
  #3 (permalink)  
Antiguo 15/07/2014, 11:40
 
Fecha de Ingreso: junio-2014
Ubicación: Mexico
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Contar el número de registros diferentes en un campo

Gracias, por la respuesta....Saludos!!

Algo, pasa que con tu ejemplo No lo he podido ejecutar. He tenido que hacer algo mas "rudimentario"....

Así me quedo....

cat archivo.txt | awk -F"|" '{if($6=="8"){print $6}}' |wc -l

Solo que debo ejecutarlo por cada valor del campo 6, y son 4 valores posibles...
  #4 (permalink)  
Antiguo 15/07/2014, 11:48
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Contar el número de registros diferentes en un campo

Pues siempre es posible que escribiendo un programa de memoria se cometa algún error, por lo pronto solamente pude ver que las comillas en la sentencia 'print' deberían ser dobles, pero cambiando eso funciona perfectamente
  #5 (permalink)  
Antiguo 15/07/2014, 11:59
 
Fecha de Ingreso: junio-2014
Ubicación: Mexico
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Contar el número de registros diferentes en un campo

Alvaro, Gracias.

Lo haz escrito de memoria?? Vaya, que bueno eres en awk! Gracias..
  #6 (permalink)  
Antiguo 15/07/2014, 12:00
 
Fecha de Ingreso: junio-2014
Ubicación: Mexico
Mensajes: 14
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Contar el número de registros diferentes en un campo

Código unix:
Ver original
  1. Codigo Final, es lo que necesitaba....
  2.  
  3. awk -F"|" 'BEGIN {
  4.                    n6 = 0;
  5.                    n7 = 0;
  6.                    n8 = 0;
  7.            }
  8.            $6~/6/ {
  9.                    n6 += 1;
  10.            }
  11.            $6~/7/ {
  12.                    n7 += 1;
  13.            }
  14.            $6~/8/ {
  15.                    n8 += 1;
  16.            }
  17.            END {
  18.                    print "ocurrencias de 6: " n6;
  19.                    print "ocurrencias de 7: " n7;
  20.                    print "ocurrencias de 8: " n8;
  21.            }
  22.     ' archivo.txt

Etiquetas: campo, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:03.