я приведу пример того, как я использую это в моих данных запроса обработки работы. Предположим, у вас есть файл экстракт полный сделок по категориям продукции и идентификатор клиента:
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]]++
работ, потому что каждая категория/Параметр client_id уникален как индекс для ассоциативного массива, используемого awk.
По правде говоря, я использую gnu awk, который работает быстрее и может делать array[i][j]
, как упоминал Д. Уильямсон. Но я хотел быть уверенным, что смогу сделать это в стандартном awk.
'gawk' as of v4 поддерживает массивы как элементы, т.е. вложенные массивы, более гибкие, чем многомерные массивы,' for (i в arr2) для (j в arr2 [i]) print arr2 [i] [j] ', см. [Ответ JJoao] (http://stackoverflow.com/a/35891319/1290731) – jthill