multidimensionale array in awk-traversal

Ik ben van plan om een ​​multidimensionale array in awk te gebruiken en ik bewaar de DETAILS in het onderstaande formaat

CODE

arr[customer1,account1]
arr[customer1,account2]
arr[customer2,account1]
arr[customer2,account2]

DETAILS

Ik moet alleen weten, hoe zou ik dit kunnen doorlopen en de resultaten kunnen afdrukken. Ook gebruik ik deze awk in een shellscript-programma, dus ik zou graag willen weten of ik dezelfde array in het shellscript kan gebruiken, en zo ja hoe ik dit kan overbrengen. Ik heb op veel sites gezocht, ik kan hier geen juiste oplossing voor vinden. Kan je me helpen om me te helpen? Dank je.

0
Een array kan niet van AWK naar de shell worden overgebracht. U kunt de waarden afdrukken vanuit het AWK-script en ze in een array in de shell lezen (zoals Bash, dat arrays ondersteunt). Merk op dat Bash geen multidimensionale arrays ondersteunt zonder lelijke hacks en dat het vóór versie 4 geen associatieve arrays ondersteunt. Of u kunt het hele script in AWK schrijven en volledige toegang hebben tot de arrays.
toegevoegd de auteur Dennis Williamson, de bron

1 antwoord

Sleutels van multidimensionale arrays worden gescheiden met de waarde van de variabele SUBSEP , gebruik deze om ze te splitsen. Doorloop de array als volgt:

for ( key in arr ) {
    split( key, values, SUBSEP )
    ## values[1] -> First value of the multidimensional array.
    ## values[2] -> Second value of the multidimensional array.
}
1
toegevoegd
Bedankt voor je antwoord. In mijn geval verander ik mijn subsept en daarom neem ik aan dat het ruimte is. Ik gebruik zoals de onderstaande awk '{FS = "="; if ($ 1 ~/Hi /) {customer = $ 2;} else if ($ 1 ~/bye /) {split ($ 2, g, "[\"] "); h [klant, g [2]] ++;} END {for (key in arr) {splitsen (sleutel, waarden," ") afdrukwaarden [1], waarden [2], h [waarden [1 ], waarden [2]]}} ... Maar hier krijg ik een foutmelding ..
toegevoegd de auteur User, de bron
Dus kan ik de ruimte vervangen door \ 034. En is mijn benadering om de waarde correct te printen ...
toegevoegd de auteur User, de bron
Eigenlijk krijg ik niet de waarde van de derde parameter, ik bedoel h [waarden [1], waarden [2]] wat de telling is ... Eventuele suggesties pls
toegevoegd de auteur User, de bron
@Gebruiker: Ik kan uw fout niet zien maar SUBSEP is standaard geen spatie. Het is \ 034 , een ongebruikelijk en niet zichtbaar teken.
toegevoegd de auteur Birei, de bron
@Gebruiker: Gebruik geen \ 034 letterlijk, gebruik de variabele SUBSEP .
toegevoegd de auteur Dennis Williamson, de bron
Merk op dat GNU awk> = 4 arrays van arrays .
toegevoegd de auteur Dimitre Radoulov, de bron