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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.