Adott egy számokból álló mátrixot reprezentáló string. Add vissza a mátrix sorait és oszlopait.
Nézzünk egy beágyazott sortöréseket tartalmazó stringet:
9 8 7
5 3 2
6 6 7
amely ezt a mátrixot reprezentálja:
1 2 3
|---------
1 | 9 8 7
2 | 5 3 2
3 | 6 6 7
A kódodnak ezeket kell kiadnia:
A példabeli mátrixunk sorai:
Az oszlopai pedig:
Ez az első feladat, amelyben a megoldás nem egy „main” szkript. A cél egy függvénykönyvtár írása, amelyet más awk programokba lehet beilleszteni. Ebben a feladatban több érdekes új fogalom is van.
A következő, „(gawk)” jelöléssel ellátott szakaszok kifejezetten GNU awk-kiterjesztések.
Ebben a feladatban fájlból fogsz adatokat beolvasni, nem a fő bemeneti adatfolyamból.
Olvass a getline-ról a Gnu awk kézikönyvben, különösen a Getline/File és a Getline/Variable/File formákról.
Egy kétdimenziós tömb is szóba jöhet a megoldás megvalósításához. A GNU awk kétféleképpen ábrázolhatja:
Figyeld meg a @include direktívát a tesztfájlban.
Ez arra utasítja a gawk-ot, hogy olvassa be és értékelje ki a megnevezett fájlt.
Minden awk változó globális (kivéve a függvényparamétereket, amelyek a függvényen belül lokálisak).
Nagy a névütközések veszélye, különösen amikor harmadik féltől származó könyvtárakat illesztünk be.
A névterek lehetővé teszik a változók tárolási helyének felosztását.
Figyeld meg a @namespace direktívát a feladat fájljaiban.
Az alapértelmezett névtér neve „awk”. Az alapértelmezett névtér lehetővé teszi a programozó számára, hogy egy másik névtérben lévő függvényből meghívjon egy beépített awk függvényt.
A tömbparaméterek referencia szerint adódnak át. A függvényben a tömbön végzett változtatások láthatóak a hívóban.
A nem tömb paraméterek érték szerint adódnak át.
A típus nélküli paraméterek esetében ez attól függ, hogy a függvény mit tesz velük:
A részletes leírás a kézikönyvben a Függvényargumentumok átadása érték vagy referencia szerint című részben található.
A függvényhatókörű (lokális) változók „érték szerinti átadás” paraméterekkel hozhatók létre. Nem hiba, ha kevesebb értéket adunk át egy függvénynek, mint a felsorolt paraméterek száma; a felesleges paraméterek „típus nélküliek” maradnak, amíg fel nem használjuk őket. Ezek a függvényben skaláris értékeket kaphatnak, amelyek nem a globális névtérben tárolódnak.
A konvenció szerint a függvény szignatúrájában először a várt paraméterek szerepelnek, majd némi whitespace, végül a lokális paraméterek. Egy példa:
function add(a, b, total) {
# here, `typeof(total)` is "untyped"
total = a + b
# now, `typeof(total)` is "number"
return total
}
BEGIN {
sum = add(5, 10)
print sum # 15
print typeof(total) # untyped, meaning "total" is unused in this scope
}
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) AWK nyelvet 3 fogalom92 feladat segítségével, valódi emberi mentorálással, mindez ingyen.