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

Array shell

Estas en el tema de Array shell en el foro de Unix / Linux en Foros del Web. Hola a tod@s, Tengo un archivo con varias filas y quiero recorrerlo para que me diga cuantas fialas hay de cada valor. Ejemplo: Cita: a ...
  #1 (permalink)  
Antiguo 17/05/2012, 04:10
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Array shell

Hola a tod@s,

Tengo un archivo con varias filas y quiero recorrerlo para que me diga cuantas fialas hay de cada valor. Ejemplo:
Cita:
a
b
a
c
d
c
c
Me deberia dar:
a:2
b:1
c:3
d:1

Seria traducir a shell esto:
Código:
for line in $(cat file.txt); do 
	datos[$line]++;	
done
Alguna idea??


Gracias

Saludos
__________________
La ficción es y será mi única realidad
  #2 (permalink)  
Antiguo 17/05/2012, 07:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Array shell

BASH y KSH soportan vectores (arrays) pero no vectores asociativos (índices que no sean numéricos). Por lo tanto, si bien la notación de vectores es ideal para este problema, no lo podrás hacer a menos que crees dos arreglos, uno conteniendo la línea y otro conteniendo la cantidad de veces que ésta aparece en el archivo, y los mantengas vinculados mediante los índices en cada uno. Es un poco engorroso, pero se puede hacer.

Una forma más larga (y en principio menos eficiente) es utilizar sort / uniq para obtener las líneas sin duplicados, y luego para cada línea única filtrar el archivo con grep para obtener la cantidad. Esto no preserva el orden, pero con una modificación simple sí lo preserva.

No te doy la solución completa porque francamente esto parece una tarea, y además no nos has mostrado lo que intentaste hasta ahora.


Saludos.

Etiquetas: shell
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 12:55.