2014-06-06 7 views
2

Est-il possible d'utiliser une variable comme index pour un tableau multidimensionnel vrai? J'ai un script gawk 4.1.1 qui passe par les fichiers de configuration Cisco, et je veux créer un tableau qui ressemble à:gawk 4 - Utiliser la variable comme un index de tableau

myarray [sitecode] [nom_commutateur]

Où sitecode et nom_commutateur sont tirés de la FILENAME en cours de traitement, puis des index supplémentaires au-delà de cela pour calculer diverses choses sur une base par commutateur. Pour ces deux index ci-dessus, je veux définir à la fois l'index et la valeur de la même variable. Donc, finalement, je pourrais avoir un tableau qui ressemble à:

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

Le code ci-dessous illustre ce que je suis en train de faire:

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

Je reçois cette erreur:

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

Je sorte de comprendre pourquoi ça se passe. J'ai déclaré var1 et var2 pour être des variables scalaires. Mais y a-t-il un travail pour ce que j'essaie de faire?

+0

array [var1] = var1: la main gauche de l'assignation est une ligne du tableau (ou un plan si vous avez un tableau 3D), le rhs est une valeur unique. Essayez-vous d'assigner toute la dimension n-1 à la fois ??? – user1666959

Répondre

1

Lorsque vous définissez array[var1] = var1, vous définissez cet élément pour contenir un scalaire.
Ensuite, vous essayez de array[var1][var2] = var2, vous voulez redéfinir le genre de chose qui est stocké à array[var1]. Je cite 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:

(Souligné par l'auteur)

Je vois que si vous essayez vos missions dans l'autre ordre, vous obtenez un message d'erreur différent mais correspondant

% 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 

Vous pouvez juste coller avec des tableaux multidimensionnels simulés:

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

Je me rendais compte juste maintenant. Je pensais pour une raison que je pourrais faire array [var1] contient à la fois une valeur scalaire et un autre tableau - tableau [var1] [var2]. Une fois que je m'en suis rendu compte et que je l'ai dit à voix haute, je me suis senti ridicule. En fait, j'ai lu ce morceau du manuel, mais la signification de cela m'a échappé. Merci pour votre réponse :) – ahxn81

+0

Je remarque que vous n'avez jamais accepté les réponses à vos questions. Pour être un membre responsable de la communauté, veuillez lire http://stackoverflow.com/help/asking –

Questions connexes