Az AWK egy nagyon kicsi nyelv, és csak néhány alapvető adattípusa van. Ebben a leckében a számokról és a stringekről lesz szó.
Az AWK-ban a számok dupla pontosságú lebegőpontos számokként vannak megvalósítva. Nem tesz különbséget egész, lebegőpontos és dupla pontosságú számok között.
Az AWK érti a nyolcas számrendszerbeli számkonstansokat (amelyek 0-val kezdődnek) és a tizenhatos számrendszerbeli számkonstansokat (amelyek 0x-szel vagy 0X-szel kezdődnek).
A szokásos aritmetikai operátorokat használhatod: +, -, *, /, %.
A hatványozás operátora a ^.
Van néhány beépített numerikus függvény is, köztük trigonometrikus függvények, véletlenszám-generálás, valamint az int(x), amely egy számot az x és a nulla közötti legközelebbi egész számra csonkol.
Az AWK stringjei karakterek sorozatai. Egy stringkonstanst kettős idézőjelek közé írva adsz meg.
Egyetlen stringművelet létezik: az összefűzés. Az összefűzésnek nincs külön operátora; ha egyszerűen egymás mellé írsz két stringet, azzal összefűzöd őket:
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
A print egy utasítás, nem függvény.
A print nem igényel zárójeleket.
Az AWK rengeteg stringmanipulációs függvénnyel rendelkezik. Ezekkel részletesen megismerkedünk majd, ahogy haladunk előre a kurzusban.
Nincsenek kifejezett operátorok a számok és a stringek közötti átalakításra. Az AWK ezt implicit módon, a program kontextusa alapján végzi el. Ez nagyon egyszerűvé teszi a bemeneti mezők értékeivel való munkát: az AWK általában egyszerűen azt csinálja, amit szeretnél.
print x + y a + numerikus műveletnek köszönhetően számmá alakítja az x és y változók értékét.print x y az összefűzésnek köszönhetően stringgé alakítja az x és y változók értékét.Ha ezt kifejezetten szeretnéd, a 0 + x megadja x számreprezentációját, a "" x pedig x stringreprezentációját.
Az, ahogyan az AWK egy stringet számmá alakít, zavaró lehet. Gondolj úgy rá, hogy az AWK a string elejétől kezdve „számkaraktereket” olvas egészen addig, amíg egy „nem szám” karakterhez nem ér. Néhány példa:
"2.5" a 2.5 számmá alakul;"1e3" az 1000 számmá alakul (tudományos jelölés);"456abc" a 456 számmá alakul (mert az a nem „számjegy”, itt megáll az átalakítás)."abc789" a 0 számmá alakul (a string elején nincsenek számok).Segítesz a barátodnak jelentést készíteni a kertje különböző zugaiban végzett leolvasásaiból. Sajnos a barátod elég furcsa formátumban tárolta az adatokat. Minden leolvasás több, vesszővel elválasztott mezőből áll. A kétjegyű számokat viszont két oszlopra bontva tárolta.
| mező száma | jelentése |
|---|---|
| 1 | azonosítószám |
| 2 | helyszín |
| 3 | az első leolvasás tízes helyi értéke |
| 4 | az első leolvasás egyes helyi értéke |
| 5 | a második leolvasás tízes helyi értéke |
| 6 | a második leolvasás egyes helyi értéke |
Egy ilyen bemeneti sor esetén: 101,house,4,2,5,4
42,54.A feladatod, hogy kiszámold a két leolvasás átlagát, és minden sor eredményét a következő formátumban írd ki:
#<id>, <label> = <average>
Mivel 42 és 54 átlaga 48, a mintasor kimenete ez legyen:
#101, house = 48
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.