Tôi đang cố gắng lợi dụng asort()
(chỉ vì) để sao chép một mảng src
để mảng dest
, không có vấn đề đó:asort (src, dest) vào một mảng đa chiều
$ awk 'BEGIN {
split("first;second;third",src,";") # make src array for testing
asort(src, dest, "@ind_num_asc") # copy array to dest
for(i in dest)
print i, src[i], dest[i] # output
}'
1 first first
2 second second
3 third third
Nhưng lại có một cách sử dụng một mảng đa chiều như mảng dest
? Một cái gì đó như:
asort(src, dest[src[1]], "@ind_num_asc") # or dest[src[1]][]
(cựu sản xuất second argument not an array
, sau syntax error
Trong thực tế đối số đầu tiên của split
là $0
và tôi đang cố gắng để hồ sơ nhóm.)
Dĩ nhiên tôi có thể sử dụng vòng lặp for
nhưng não của tôi bị kẹt khi thử nghiệm giải pháp này.
Funny điều là nếu bạn định nghĩa mảng trước với 'dest [ "đầu tiên"] [1] = ""' nó sau đó đưa ra một "chết người: cố gắng sử dụng mảng 'dest [" đầu tiên "] 'trong một bối cảnh vô hướng" lỗi. Thật thú vị khi đọc phần cuối cùng của [GNU awk trên mảng mảng] (https://www.gnu.org/software/gawk/manual/html_node/Arrays-of-Arrays.html): _Recall rằng tham chiếu đến một uninitialized phần tử mảng mang lại giá trị "", chuỗi rỗng. Điều này có một ý nghĩa quan trọng khi bạn dự định sử dụng một subarray như một đối số cho một function_. – fedorqui
Vâng, thực sự không nhất quán về ví dụ đó và 'asort'. Tôi chơi xung quanh với 'split'ting để' dest ["tmp"] 'cũng nhưng' asort' vẫn chưa sẵn sàng. –
Các hàm 'asort()' và 'split()' hoàn toàn nhất quán và hoạt động chính xác [như tài liệu] (https://www.gnu.org/software/gawk/manual/gawk.html#Arrays-of-Arrays), không chắc chắn nơi mà sự hiểu lầm/nhầm lẫn là đến từ. –