البرمجة

تعلم البرمجة بلغة Awk

تعلم البرمجة بلغة Awk عبر برمجة لعبة

مقدمة

في عالم البرمجة الحديث، تُعتبر لغات البرمجة النصية (Scripting Languages) من الأدوات القوية التي تسهل معالجة البيانات وتنفيذ الأوامر بشكل سريع وفعال. من بين هذه اللغات تبرز لغة Awk كلغة مميزة وسهلة الاستخدام، تتيح للمبرمجين إمكانية التعامل مع النصوص والملفات بشكل فريد، خصوصًا في بيئات أنظمة التشغيل يونكس ولينكس. تكمن قوة Awk في بساطتها وقدرتها على تنفيذ عمليات متقدمة على النصوص بسهولة، مما يجعلها أداة أساسية للمهتمين بمعالجة البيانات، تحليل الملفات، وأتمتة المهام.

في هذا المقال سيتم التطرق إلى لغة Awk من خلال أسلوب عملي يتمثل في برمجة لعبة بسيطة، كوسيلة تعليمية تجمع بين الفائدة والتطبيق العملي، مما يسهل فهم المفاهيم الأساسية للغة Awk واستخداماتها المتنوعة.


ما هي لغة Awk؟

لغة Awk هي لغة برمجة نصية تم تطويرها في السبعينيات من قبل Alfred Aho وPeter Weinberger وBrian Kernighan، وهو ما يفسر الحروف الأولى من أسمائها (Aho, Weinberger, Kernighan). تتميز Awk بأنها مصممة للتعامل مع النصوص والبيانات المنظمة على شكل حقول، كما تُستخدم بشكل واسع في التعامل مع ملفات النصوص، التصفية، تحليل السجلات، إنشاء التقارير، وغير ذلك.

تعمل Awk بشكل أساسي على قراءة ملفات الإدخال سطرًا بسطر، حيث تقوم بتحليل الحقول (Fields) داخل السطر باستخدام الفاصل المحدد (عادةً ما يكون فراغ أو تبويب)، ثم تنفيذ عمليات محددة على هذه الحقول بناءً على تعليمات المستخدم.


أساسيات لغة Awk

قبل الانتقال إلى برمجة اللعبة، من الضروري استعراض بعض المفاهيم الأساسية للغة Awk:

1. بناء الجملة الأساسي

يتكون برنامج Awk عادة من نمط (Pattern) متبوع بإجراء (Action):

awk
pattern { action }

عند معالجة كل سطر من ملف الإدخال، يتم تطبيق النمط، وإذا تحقق، يتم تنفيذ الإجراء.

2. الحقول والسجلات

  • السطر الواحد يُعتبر سجل (Record).

  • الحقول داخل السطر تفصل عادة بمسافة أو علامة تبويب.

  • الحقول يمكن الإشارة إليها بـ $1، $2، …، حيث $1 يمثل الحقل الأول، وهكذا.

  • $0 يمثل السطر كاملًا.

3. المتغيرات والقيم

تدعم Awk المتغيرات وتعيين القيم، ويمكن استخدام العمليات الحسابية والمنطقية.

4. الجمل الشرطية والحلقات

  • تدعم Awk جمل if، else، وswitch.

  • تدعم الحلقات مثل while وfor.


برمجة لعبة بسيطة بلغة Awk

فكرة اللعبة

لنفترض أننا نريد بناء لعبة بسيطة تعتمد على إدخال المستخدم تخمين رقم، وعلى البرنامج أن يرد إذا كان التخمين أكبر، أصغر أو صحيح. هذه اللعبة، رغم بساطتها، تمثل فرصة جيدة لفهم كيفية التعامل مع الإدخال، المتغيرات، التحكم بالتدفق، والمقارنات في Awk.


إعداد بيئة العمل

لتشغيل برامج Awk، يمكن استخدام الطرفية في أنظمة يونكس/لينكس، حيث يمكن كتابة السكربت في ملف نصي ثم تشغيله عبر الأمر:

bash
awk -f game.awk

أو يمكن كتابة السكربت مباشرة في الطرفية.


كتابة سكربت اللعبة

نبدأ بكتابة السكربت الذي يحدد رقمًا سريًا يتعين على اللاعب تخمينه، ثم يستقبل التخمينات ويعطي تلميحات.

awk
BEGIN { secret = 42 # الرقم السري print "مرحبا بك في لعبة التخمين!" print "حاول تخمين الرقم السري بين 1 و 100." } { guess = $1 # قراءة التخمين من الإدخال if (guess < secret) { print "رقمك أقل من الرقم السري." } else if (guess > secret) { print "رقمك أكبر من الرقم السري." } else { print "مبروك! لقد خمّنت الرقم الصحيح." exit # إنهاء اللعبة عند التخمين الصحيح } }

شرح السكربت

  • في قسم BEGIN يتم تنفيذ التعليمات قبل معالجة أي سطر من الإدخال، حيث يتم تحديد الرقم السري وطباعة رسالة ترحيبية.

  • عند قراءة كل سطر (كل تخمين)، يتم تخزين التخمين في المتغير guess.

  • باستخدام جمل الشرط يتم مقارنة التخمين بالرقم السري وإعطاء الرد المناسب.

  • عند النجاح (guess == secret)، تنتهي اللعبة بواسطة الأمر exit.


طريقة التشغيل

لحفظ السكربت في ملف باسم game.awk، ثم تشغيله عبر:

bash
awk -f game.awk

ويتم إدخال الأرقام من المستخدم سطرًا بسطر عبر الطرفية، حتى يتم التخمين الصحيح.


تحسينات وتطويرات إضافية على اللعبة

يمكن تطوير اللعبة باستخدام تقنيات متقدمة في Awk لإضافة ميزات جديدة تزيد من تفاعل اللعبة وتعقيدها:

1. توليد الرقم السري عشوائيًا

بدلاً من الرقم السري الثابت، يمكن استخدام الدالة srand() مع rand() لتوليد رقم عشوائي في نطاق محدد.

awk
BEGIN { srand() secret = int(rand() * 100) + 1 print "مرحبا بك في لعبة التخمين!" print "حاول تخمين الرقم السري بين 1 و 100." }

2. تحديد عدد المحاولات

يمكن تحديد حد أقصى لعدد المحاولات والسماح للاعب بمحاولة تخمين الرقم خلال هذا العدد فقط.

awk
BEGIN { srand() secret = int(rand() * 100) + 1 attempts = 0 max_attempts = 10 print "مرحبا بك في لعبة التخمين!" print "لديك " max_attempts " محاولات لتخمين الرقم بين 1 و 100." } { if (attempts >= max_attempts) { print "لقد نفدت محاولاتك! الرقم الصحيح هو " secret exit } guess = $1 attempts++ if (guess < secret) { print "رقمك أقل من الرقم السري." } else if (guess > secret) { print "رقمك أكبر من الرقم السري." } else { print "مبروك! لقد خمّنت الرقم الصحيح بعد " attempts " محاولات." exit } }

3. توضيح نوع الإدخال وتأكيد صحته

يمكن إضافة تحقق من أن الإدخال هو رقم صحيح ضمن النطاق المطلوب.

awk
{ if ($1 !~ /^[0-9]+$/) { print "الرجاء إدخال رقم صحيح." next } guess = $1 + 0 if (guess < 1 || guess > 100) { print "الرقم يجب أن يكون بين 1 و 100." next } ... }

استخدام الجداول في لعبة Awk

قد يطلب الأمر استخدام جداول (مصفوفات) في Awk لتخزين بيانات إضافية حول اللعبة، مثل تخزين المحاولات السابقة، أو عداد الفوز والخسارة.

مثلاً، يمكن تخزين المحاولات السابقة في مصفوفة لتجنب التخمينات المكررة:

awk
{ if (guesses[$1]) { print "لقد خمّنت هذا الرقم مسبقًا. حاول رقمًا آخر." next } guesses[$1] = 1 ... }

إمكانيات Awk في البرمجة العملية

لغة Awk ليست مخصصة فقط لبرمجة الألعاب، لكنها توفر أدوات قوية لمعالجة النصوص والبيانات، وتشغيل الأوامر بشكل آلي، وتنفيذ عمليات معقدة على الملفات النصية مثل ملفات السجلات، جداول البيانات النصية، والبيانات المهيكلة.

يمكن دمج Awk مع أدوات أخرى في نظام التشغيل، مثل sed، grep، bash، مما يجعلها جزءًا أساسيًا في مهارات المبرمجين أو مسؤولي النظام.


مقارنة Awk بلغات برمجة أخرى

بالرغم من بساطة Awk، إلا أنها تتيح وظائف متقدمة في تحليل البيانات، لكن لا تُستخدم كلغة برمجة كاملة لتطوير تطبيقات ضخمة كما في Python أو Java. بالمقابل، تتميز Awk بسرعة التنفيذ في معالجة الملفات النصية، وعدم الحاجة لتركيب بيئة تطوير معقدة، وتكاملها السلس مع أدوات يونكس.


نصائح للمبتدئين في تعلم Awk

  • البدء بفهم كيفية التعامل مع الملفات النصية وتقسيمها إلى حقول.

  • تجربة أوامر Awk البسيطة في الطرفية مع ملفات صغيرة.

  • قراءة ملفات المساعدة والدروس المتوفرة على الإنترنت.

  • برمجة مهام بسيطة مثل حساب المتوسط، استخراج بيانات معينة من ملف CSV، أو تحويل النصوص.

  • التدرج نحو كتابة سكربتات متقدمة مثل لعبة التخمين أو تقارير مخصصة.


خاتمة

تُعتبر لغة Awk أداة قوية في عالم البرمجة النصية، وتمتاز بسهولة تعلمها وسرعة إنجازها للمهام المتعلقة بمعالجة النصوص. برمجة لعبة بسيطة باستخدام Awk تمنح المتعلم تجربة تطبيقية تجمع بين المتعة والفائدة، وتساعد على فهم كيفية التعامل مع المتغيرات، الجمل الشرطية، الحلقات، وإدخال البيانات في بيئة نصية.

تعلم Awk يعزز القدرة على أتمتة العديد من العمليات في أنظمة التشغيل، ويُفتح آفاقًا للتعامل مع البيانات النصية بكفاءة عالية. يمكن للمبرمجين الجدد الاستفادة من هذا المسار التعليمي العملي للانتقال بعد ذلك إلى استخدام Awk في مهام أكثر تعقيدًا، أو التوجه نحو لغات برمجة أخرى بعد بناء أساس متين.


مصادر ومراجع

  • الكتاب الرسمي لـ Awk: “The AWK Programming Language” لـ Alfred Aho, Brian Kernighan, and Peter Weinberger.

  • الوثائق الرسمية لأوامر Awk في أنظمة Linux (man awk).

  • دروس ومقالات برمجية على مواقع تعليم البرمجة مثل GNU Awk User’s Guide.