Я приведу пример того, как я использую это в своих данных обработки запросов.Предположим, у вас есть файл выписки, полный транзакций по категории продукта и идентификатору клиента:
customer_id category sales
1111 parts 100.01
1212 parts 5.20
2211 screws 1.33
...etc...
Его простой в использовании awk для подсчета общего количества отдельных покупателей при покупке:
awk 'NR>1 {a[$1]++} END {for (i in a) total++; print "customers: " total}' \
datafile.txt
Однако,вычисление количества отдельных клиентов с покупкой в каждой категории предполагает двухмерный массив:
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
Приращение custs[arr[1]]++
работает, потому что каждая пара категория / customer_id уникальна как индекс для используемого ассоциативного массивапо awk.
По правде говоря, я использую gnu awk, который работает быстрее и может выполнять array[i][j]
, как упоминал Д. Уильямсон.Но я хотел быть уверен, что смогу сделать это в стандартном awk.