awk 배열의 모든 내용을 보는 방법은 무엇입니까?

awk 배열의 모든 내용을 보는 방법은 무엇입니까?

내 이해에 따르면 awk 배열은 Python 사전과 유사합니다.

그래서 이를 탐색하기 위해 다음 코드를 작성했습니다.

awk '{my_dict[$1] = $2} END { print my_dict}' zen

알겠어요:awk: can't read value of my_dict; it's an array name.

첫 번째 열은 숫자가 아니므로 배열의 전체 내용을 읽거나 반복하려면 어떻게 해야 합니까?

답변1

배열의 키를 반복하여 해당 값을 추출할 수 있습니다.

awk '{my_dict[$1] = $2} END { for (key in my_dict) { print my_dict[key] } }' zen

Python 사전과 유사한 출력을 얻으려면 키를 인쇄할 수도 있습니다.

awk '{my_dict[$1] = $2} END { for (key in my_dict) { print key ": " my_dict[key] } }' zen

이는 키 유형에 관계없이 작동합니다.

답변2

이는 배열을 통해 반복됩니다.

END { for (i in my_dict) print my_dict[i] }

i지수입니다.

답변3

배열은 awk사전과 같은 일급 객체가 아닙니다 Python. 에서는 awk아래 첨자가 없는 배열 이름은 다음에서만 사용할 수 있습니다.두 가지 상황:

  • 함수 정의 또는 함수 호출의 매개변수입니다.
  • 키워드 뒤의 이름 태그입니다 in.

다른 경우에는 awk오류가 발생합니다.

for배열의 내용을 반복하고 인쇄하려면 루프가 필요합니다 .

$ echo 1 2 | awk '{my_dict[$1] = $2};END {for(i in my_dict) print my_dict[i]}'
2

답변4

GNU AWK는 다차원 연관 배열을 사용합니다. 예를 들면 다음과 같습니다.

family[me][father][grandpa][name]="George"
family[me][father][grandpa][age]=70
family[me][father][grandma][name]="Katherine"
family[me][father][name]="Vasiliy"
family[me][name]="Ivan"

등.

때로는 awk 배열을 탐색하는 것이 어렵습니다.정보처리시스템(스칼라 외에도 하위 배열도 있기 때문입니다.정액&아이덴티티 마크)

그래서 저는 이 awk 스크립트를 직접 작성했습니다. 아마도 그것은 당신에게 효과가 있을 것입니다. \033[1;31m색상 출력이 마음에 들지 않거나 색상이 있는 경우 이러한 하위 문자열을 제거할 수 있습니다 .

#!/usr/bin/gawk -f
function arraytree(inputarray,arrname,i,member,arrnum){
 if(!isarray(inputarray)){
  print indent arrname member "[\033[1;31m" i "\033[0m]=\"\033[1;32m" inputarray"\033[0m\""
 }else{
  arrnum=i
  member=i?member "[" i "]":""
  print indent (i? arrname member:arrname)"(\033[1;34m" length(inputarray) " member"(length(inputarray)>1?"s":"")"\033[0m)"
  indent=indent " "
  for(i in inputarray){
   arraytree(inputarray[i],arrname,i,member,arrnum)}
   indent=substr(indent,1,length(indent)-1)
  }
}
BEGIN{
arraytree(ArrayName,"ArrayName")
}

관련 정보