AWK ist eine sehr kleine Sprache und kennt nur wenige grundlegende Datentypen. In dieser Lektion schauen wir uns Zahlen und Strings an.
Zahlen sind in AWK als Gleitkommazahlen mit doppelter Genauigkeit umgesetzt. Es gibt keinen Unterschied zwischen Ganzzahlen, Gleitkommazahlen und Doubles.
AWK versteht oktale Zahlenkonstanten (beginnen mit 0) und hexadezimale Zahlenkonstanten (beginnen mit 0x oder 0X).
Du kannst die üblichen arithmetischen Operatoren +, -, *, /, % verwenden.
Der Operator für Potenzen ist ^.
Es gibt einige eingebaute numerische Funktionen, darunter trigonometrische Funktionen, die Erzeugung von Zufallszahlen und int(x), um eine Zahl auf die nächste Ganzzahl zwischen x und null abzuschneiden.
AWK-Strings sind Zeichenfolgen. Du gibst eine String-Konstante mit doppelten Anführungszeichen an.
Es gibt nur eine String-Operation: die Verkettung. Für die Verkettung gibt es keinen eigenen Operator; wenn du zwei Strings einfach nebeneinanderstellst, werden sie verkettet:
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
print ist eine Anweisung, keine Funktion.
print benötigt keine runden Klammern.
AWK hat eine Fülle von Funktionen zur String-Manipulation. Wir werden sie im Laufe des Tracks noch ausführlich kennenlernen.
Es gibt keine expliziten Operatoren, um zwischen Zahlen und Strings umzuwandeln. AWK erledigt das implizit, je nach Kontext des Programms. Das macht die Arbeit mit den Werten von Eingabefeldern sehr einfach: AWK macht im Allgemeinen einfach das, was du willst.
print x + y wandelt die Werte der Variablen x und y dank der numerischen Operation + in Zahlen um.print x y wandelt die Werte der Variablen x und y dank der Verkettung in Strings um.Wenn du es explizit haben willst, liefert 0 + x die Zahlendarstellung von x und "" x die Stringdarstellung von x.
Die Art und Weise, wie AWK einen String in eine Zahl umwandelt, kann verwirrend sein. Ein einfacher Denkansatz: AWK liest vom Anfang eines Strings so lange „Zahlenzeichen", bis es auf ein Zeichen trifft, das keine Zahl ist. Ein paar Beispiele:
"2.5" wird in die Zahl 2.5 umgewandelt;"1e3" wird in die Zahl 1000 umgewandelt (wissenschaftliche Notation);"456abc" wird in die Zahl 456 umgewandelt (weil a keine „Ziffer" ist, endet die Umwandlung dort)."abc789" wird in die Zahl 0 umgewandelt (am Anfang des Strings stehen keine Zahlen).Du hilfst einem Freund, einen Bericht aus Messwerten zu erstellen, die er in verschiedenen Ecken seines Gartens aufgenommen hat. Leider hat dein Freund die Daten in einem seltsamen Format gespeichert. Jeder Messwert besteht aus einer Reihe durch Kommas getrennter Felder. Allerdings hat er zweistellige Zahlen auf zwei Spalten verteilt gespeichert.
| Feldnummer | Bedeutung |
|---|---|
| 1 | ID-Nummer |
| 2 | Ort |
| 3 | erster Messwert, Zehnerwert |
| 4 | erster Messwert, Einerwert |
| 5 | zweiter Messwert, Zehnerwert |
| 6 | zweiter Messwert, Einerwert |
Für eine Eingabezeile wie 101,house,4,2,5,4
42,54.Deine Aufgabe ist es, den Durchschnitt der beiden Messwerte zu ermitteln und die Ergebnisse jeder Zeile im folgenden Format auszugeben
#<id>, <label> = <average>
Da der Durchschnitt von 42 und 54 48 ist, sollte die Ausgabe für die Beispielzeile so aussehen:
#101, house = 48
Melde dich bei Exercism an, um AWK mit 3 Konzepte92 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.