voy a dar un ejemplo de cómo utilizar esto en mis datos de consulta de procesamiento de trabajo. Suponga que tiene un archivo de extracción completa de las transacciones por categoría de producto y la identificación del cliente:
customer_id category sales
1111 parts 100.01
1212 parts 5.20
2211 screws 1.33
...etc...
Es fácil de usar awk para contar los clientes distintos en total con una compra:
awk 'NR>1 {a[$1]++} END {for (i in a) total++; print "customers: " total}' \
datafile.txt
Sin embargo, el cálculo del número de clientes distintos con una compra en cada categoría sugiere una matriz bidimensional:
awk 'NR>1 {a[$2,$1]++}
END {for (i in a) {split(i,arr,SUBSEP); custs[arr[1]]++}
for (k in custs) printf "category: %s customers:%d\n", k, custs[k]}' \
datafile.txt
El incremento de custs[arr[1]]++
obras porque cada categoría/custo mer_id pair es único como índice de la matriz asociativa utilizada por awk.
En verdad, yo uso gnu awk que es más rápido y puedo hacer array[i][j]
como lo mencionó D. Williamson. Pero quería asegurarme de poder hacer esto en awk estándar.
'gawk' a partir de v4 admite matrices como elementos, es decir, matrices anidadas, más flexibles que las matrices multidimensionales,' para (i en arr2) para (j en arr2 [i]) imprimir arr2 [i] [j] ', ver [Respuesta de JJoao] (http://stackoverflow.com/a/35891319/1290731) – jthill