2014-06-06 3 views
2

변수를 진정한 다차원 배열의 인덱스로 사용할 수 있습니까? 나는 시스코 구성 파일을 통해 실행되는 둔한 4.1.1 스크립트를 가지고 있고, 나는 보이는 배열을 만들려면 같은 :gawk 4 - 변수를 배열 인덱스로 사용

에서 myArray [Sitecode를] [switchname] Sitecode를하고 switchname은 파일 이름에서 가져온되는

스위치를 기준으로 여러 가지를 계산하기 위해 추가 인덱스가 필요합니다. 위의 두 인덱스의 경우 인덱스와 값을 동일한 변수로 설정하려고합니다. 종류

awk: cmd. line:6: (FILENAME=- FNR=1) fatal: attempt to use scalar `array["variable1"]' as an array 

내가 :

#!/bin/bash 
awk '{ 
var1="variable1" 
var2="variable2" 
array[var1]=var1 
array[var1][var2]=var2 
print array[var1][var2] 
}' 

내가이 오류 :

myarray[nyc01][switch01][Vlan100][192.168.100.1] 
myarray[nyc01][switch01][Vlan101][192.168.101.1] 
myarray[nyc01][switch02][Vlan200][192.168.200.1] 

아래의 코드는 내가 뭘하려고 오전 보여처럼 그래서 결국 나는 보이는 배열을 가질 수있다 왜 일어나는 지 이해하십시오. 나는 var1과 var2를 스칼라 변수로 선언했다. 그러나 내가하려는 일에 대한 해결책이 있습니까?

+0

배열 [var1] = var1 : 왼쪽 손 si de는 배열의 행 (또는 3D 배열이있는 경우 평면)이고 rhs는 단일 값입니다. 한 번에 전체 n-1 차원을 지정하려고합니까? – user1666959

답변

1

array[var1] = var1을 설정하면 해당 요소가 스칼라를 보유하도록 설정됩니다.
그런 다음 array[var1][var2] = var2을 시도하면 array[var1]에 저장되는 종류의 것을 재정의하려고합니다. 에서 인용 the manual

The type of any element that has already been assigned cannot be changed by assigning a value of a different type. You have to first delete the current element, which effectively makes gawk forget about the element at that index:

(강조 광산) 난 당신이 다른 순서로 할당을 시도하는 경우, 당신은

% awk 'BEGIN {v1="foo"; v2="bar";a[v1][v2] = v2; a[v1]=v1}' 
awk: cmd. line:1: fatal: attempt to use array `a["foo"]' in a scalar context 

당신은 단지 스틱 수있는 다른 있지만 해당 오류 메시지가 볼

시뮬레이션 된 다차원 배열 :

$ awk 'BEGIN {v1="foo"; v2="bar"; a[v1] = v1; a[v1,v2] = v2; print a[v1,v2]}' 
bar 
+0

나는 지금 그것을 깨닫고 있었다. 배열 [var1]에 스칼라 값과 다른 배열 (array [var1] [var2])을 둘 수있는 어떤 이유로 생각했습니다. 내가 그것을 깨닫고 나 자신에게 큰 소리로 말하면, 나는 꽤 바보 같았다. 나는 매뉴얼에서 그 부분을 실제로 읽었지 만, 그 의미는 나를 벗어났다. 답변 해 주셔서 감사합니다. – ahxn81

+0

질문에 대한 대답을 결코 받아 들일 수 없습니다. 책임있는 회원이 되려면 http://stackoverflow.com/help/asking을 읽어보십시오. –

관련 문제