2013-04-18 8 views
5

AWK 4.0 이후에 for 루프 앞에 PROCINFO [ "sorted_in"] 명령을 넣어 정의 된 순서로 배열을 인쇄 할 수 있다는 것을 알아 냈습니다. 예 :AWK 3.1.3에서 정의 된 순서로 배열을 인쇄하는 방법

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

AWK 4.0.2에서는 작동합니다. 그러나, AWK 3.1.3 환경에서 시도했지만 작동하지 않았습니다. AWK의 초기 버전이이 기능을 지원하지 않습니까? AWK 3.1.3에서이 목표를 달성하는 방법은 무엇입니까?

+0

배열 정렬을 위해 asort/asorti 체크 아웃 – Laurijssen

+0

아니요, GNU가 아닌 awks 및 이전 버전의 gawk는이 기능을 지원하지 않습니다. "정의 된 질서"와 "이 목표"를 명확히하십시오. 특정 순서로 배열을 인쇄하려고합니까? 그렇다면 순서 (첫 번째 또는 숫자 정렬 또는 알파벳순 정렬 ...)가 무엇입니까? 또는 PROCINFO []를 채우는 것으로 예제에서 보여주는 것처럼 인쇄 배열의 다른 순서를 정의하는 메커니즘을 찾고 있습니까? –

답변

4

두 번째 배열 order을 숫자 인덱스와 첫 번째 배열의 키와 함께 값으로 유지하십시오. 여러 표시되는

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

order를 구축, 당신은 array의 열쇠를 방지하기 위해, array의 키가 이미 존재하는지 여부를 확인 할 수 있습니다 : 당신은 다음 순서로 order을 반복하고 array의 값을 찾아 볼 수 있습니다 타임스.

+0

3.1.3에 "length"기능이 없습니다. Ventimiglia의 기능 (내 확장 기능 포함)은 http://stackoverflow.com/questions/9351902/how-can-i-get-the-length-of- an-array-in-awk/19411381 # 19411381 또는 "주문"생성시 마지막 색인을 사용하십시오. –

관련 문제