tôi sẽ cung cấp một ví dụ về cách tôi sử dụng này trong truy vấn dữ liệu xử lý công việc của tôi. Giả sử bạn có một tập tin giải nén đầy đủ các giao dịch bằng loại sản phẩm và id khách hàng:
customer_id category sales
1111 parts 100.01
1212 parts 5.20
2211 screws 1.33
...etc...
của nó dễ dàng để sử dụng awk để đếm tổng số khách hàng riêng biệt với mua hàng:
awk 'NR>1 {a[$1]++} END {for (i in a) total++; print "customers: " total}' \
datafile.txt
Tuy nhiên, tính toán số lượng khách hàng khác biệt với giao dịch mua trong mỗi danh mục cho thấy mảng hai chiều:
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
Tăng thêm custs[arr[1]]++
hoạt động vì mỗi danh mục/custo cặp mer_id là duy nhất như một chỉ mục cho mảng kết hợp được sử dụng bởi awk.
Thật ra, tôi sử dụng gnu awk nhanh hơn và có thể làm array[i][j]
như D. Williamson đã đề cập. Nhưng tôi muốn chắc chắn rằng tôi có thể làm điều này trong tiêu chuẩn awk.
'gawk' như v4 hỗ trợ mảng như phần tử tức là mảng lồng nhau, linh hoạt hơn mảng đa chiều,' cho (i trong arr2) cho (j trong arr2 [i]) in arr2 [i] [j] ', xem [Câu trả lời của JJoao] (http://stackoverflow.com/a/35891319/1290731) – jthill