AWK - це дуже маленька мова, і в неї є лише кілька базових типів даних. У цьому уроці ми розглянемо числа та рядки тексту (англ. string).
Числа в AWK реалізовано як числа з плаваючою комою подвійної точності. AWK не розрізняє цілі числа, числа з плаваючою комою та числа подвійної точності.
AWK розуміє вісімкові числові константи (що починаються з 0) і шістнадцяткові числові константи (що починаються з 0x або 0X).
Ми можемо використовувати стандартні арифметичні оператори +, -, *, /, %.
Оператор піднесення до степеня - ^.
Є кілька вбудованих числових функцій, зокрема тригонометричні функції, генерація випадкових чисел і int(x), яка відкидає дробову частину й дає найближче ціле між x і нулем.
Рядки тексту в AWK складаються з символів. Щоб задати рядкову константу, використовуйте подвійні лапки.
Існує лише одна операція з рядками тексту: конкатенація. У конкатенації немає спеціального оператора; достатньо розмістити два рядки тексту поруч, і вони зʼєднаються:
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
print - це інструкція, а не функція.
print не потребує дужок.
AWK має безліч функцій для роботи з рядками тексту. Ми докладно познайомимося з ними далі.
Немає явних операторів для перетворення чисел у рядки тексту й навпаки. AWK робить це неявно, залежно від контексту програми. Це дуже спрощує роботу зі значеннями полів вхідних даних: AWK зазвичай робить саме те, що нам потрібно.
print x + y перетворить значення змінних x і y на числа завдяки числовій операції +.print x y перетворить значення змінних x і y на рядки тексту завдяки операції конкатенації.Якщо потрібно зробити це явно, 0 + x дає числове представлення x, а "" x дає рядкове представлення x.
Те, як AWK перетворює рядок тексту на число, може заплутати. Простий спосіб уявити це: AWK читає «числові символи» від початку рядка тексту, доки не натрапить на символ, який не є числом. Ось кілька прикладів:
"2.5" перетворюється на число 2.5;"1e3" перетворюється на число 1000 (наукова нотація);"456abc" перетворюється на число 456 (оскільки a не є числом, перетворення там зупиняється)."abc789" перетворюється на число 0 (на початку рядка тексту немає чисел).Ми допомагаємо другові створити звіт із вимірювань, які він зробив у різних куточках свого саду. На жаль, друг зберіг дані в дивному форматі. Кожне вимірювання складається з полів, розділених комами. Проте двоцифрові числа він розділив на два стовпці.
| номер поля | значення |
|---|---|
| 1 | ідентифікаційний номер |
| 2 | місце |
| 3 | перше вимірювання, десятки |
| 4 | перше вимірювання, одиниці |
| 5 | друге вимірювання, десятки |
| 6 | друге вимірювання, одиниці |
Для вхідного рядка, як-от 101,house,4,2,5,4
42,54.Знайдіть середнє двох вимірювань і виведіть результати кожного рядка в такому форматі:
#<id>, <label> = <average>
Оскільки середнє 42 і 54 дорівнює 48, виведення для рядка з прикладу має бути таким:
#101, house = 48
Зареєструйтеся на Exercism, щоб вивчати й опановувати AWK, а також 3 концепції92 вправи та справжнє наставництво від людей, і все це безкоштовно.