2013-04-18 27 views
5

Tôi googled nó và tìm hiểu rằng sau khi AWK 4.0 chúng ta có thể in một mảng theo thứ tự được xác định bằng cách đặt lệnh PROCINFO ["sorted_in"] ngay trước đó cho vòng lặp. Ví dụ:Làm thế nào để in một mảng theo thứ tự xác định trong AWK 3.1.3

PROCINFO["sorted_in"] = "@ind_num_asc" 
    for(i in array) 
      print i, array[i] 

Trong AWK 4.0.2, nó hoạt động. Tuy nhiên, tôi đã thử nó trong môi trường AWK 3.1.3, nó không hoạt động. Phiên bản AWK đầu tiên này có hỗ trợ chức năng này không? Làm thế nào để đạt được mục tiêu này trong AWK 3.1.3?

+0

kiểm tra asort/asorti để sắp xếp mảng – Laurijssen

+0

Không, phiên bản không phải GNU và các phiên bản cũ của chim ưng không hỗ trợ chức năng này. Làm rõ "thứ tự được xác định" và "mục tiêu này". Bạn đang tìm cách in một mảng theo một thứ tự cụ thể và, nếu có, thứ tự (sắp xếp đầu tiên hoặc số hoặc sắp xếp theo thứ tự chữ cái hoặc ...) là gì? Ngoài ra, bạn đang tìm kiếm một cơ chế để xác định các đơn đặt hàng khác nhau của mảng in như bạn hiển thị trong ví dụ của bạn bằng cách điền PROCINFO []? –

Trả lời

4

Chỉ giữ một mảng thứ hai order với chỉ số và các phím cho mảng đầu tiên làm giá trị. Sau đó bạn có thể lặp qua order theo thứ tự và tìm kiếm các giá trị của array:

for (i = 1; i < length(order); i++) { 
    print order[i], array[order[i]] 
} 

Khi xây dựng order, bạn có thể muốn kiểm tra xem phím là đã có trong array, để ngăn chặn các phím của array được hiển thị nhiều lần.

+0

Không có chức năng "chiều dài" trong 3.1.3.Xem chức năng của ông Ventimiglia (với extensión của tôi) tại http://stackoverflow.com/questions/9351902/how-can-i-get-the-length-of- a-array-in-awk/19411381 # 19411381 hoặc chỉ giữ chỉ mục cuối cùng được sử dụng khi tạo "thứ tự". –

Các vấn đề liên quan