GAWK(1)

الاسم
gawk - لغة فحص الأنماط ومعالجتها

موجز
gawk [ خيارات بنمط POSIX أو GNU ] -f ملف-البرنامج [ -- ] ملف ...
gawk [ خيارات بنمط POSIX أو GNU ] [ -- ] نص-البرنامج ملف ...

اقرأني أولًا
وُفرت صفحة الدليل هذه كمجاملة. يرجى ملاحظة أن المصدر الوحيد للحقيقة لبرنامج gawk هو دليل Texinfo، المتاح عبر الإنترنت بتنسيقات عديدة في https://www.gnu.org/software/gawk/manual. قد يكون مثبتًا أيضًا في نظام Info الفرعي على حاسوبك، وبالتالي متاحًا عبر الأمر info(1).

في حال وجود أي تعارض بين دليل Texinfo وصفحة الدليل هذه، يجب اعتبار دليل Texinfo هو المرجع المعتمد.

لاحظ أن وثائق Info، وصفحات الويب HTML، ونسخة PDF من الدليل تحتوي جميعها على المحتوى ذاته، حيث وُلدت جميعها من ملف مصدر Texinfo نفسه.

علاوة على ذلك، يحتفظ وصي gawk بالحق في المستقبل في إزالة صفحة الدليل هذه من التوزيعة أو اختصار المحتوى بشكل كبير لتخفيف عبء الصيانة عليه.

الوصف
Gawk هو تطبيق مشروع GNU للغة البرمجة AWK. وهو يتوافق مع تعريف اللغة في معيار POSIX 1003.1. تعتمد هذه النسخة بدورها على الوصف الوارد في كتاب لغة البرمجة AWK، بواسطة Aho وKernighan وWeinberger. يوفر Gawk الميزات الإضافية الموجودة في النسخة الحالية من awk الخاص ببرايان كيرنيغان والعديد من الامتدادات الخاصة بـ GNU.

يتكون سطر الأوامر من خيارات لبرنامج gawk نفسه، ونص برنامج AWK (إذا لم يُوفر عبر الخيارين -f أو --include)، والقيم التي ستُتاح في متغيرات AWK المحددة مسبقًا ARGC وARGV.

تصدير
صُممت صفحة الدليل هذه لتكون موجزة قدر الإمكان. تُوفر التفاصيل الكاملة في GAWK: برمجة AWK الفعالة، ويجب عليك البحث هناك عن القصة الكاملة لأي ميزة محددة. وُفرت روابط للنسخة المتاحة عبر الإنترنت من الدليل حيثما أمكن ذلك.

تنسيق الخيارات
قد تكون خيارات Gawk إما خيارات تقليدية من حرف واحد بنمط POSIX، أو خيارات طويلة بنمط GNU. تبدأ خيارات POSIX بشرطة مفردة “-”، بينما تبدأ الخيارات الطويلة بشرطتين “--”. تُوفر الخيارات الطويلة لكل من الميزات الخاصة بـ GNU والميزات المفروضة من POSIX.

تُستخدم الخيارات الخاصة بـ Gawk عادةً في شكل الخيارات الطويلة. تُربط معاملات الخيارات الطويلة بالخيار إما بعلامة =، بدون مسافات فاصلة، أو قد تُوفر في المعامل التالي في سطر الأوامر. يمكن اختصار الخيارات الطويلة، طالما ظل الاختصار فريدًا.

بالإضافة إلى ذلك، لكل خيار طويل خيار قصير مقابل، بحيث يمكن استخدام وظائف الخيار من داخل سكربتات #! القابلة للتنفيذ.

الخيارات
يقبل Gawk الخيارات التالية. تُدرج الخيارات القياسية أولًا، تليها خيارات امتدادات gawk، مرتبة أبجديًا حسب الخيار القصير.

-f ملف-البرنامج، --file ملف-البرنامج
    اقرأ مصدر برنامج AWK من الملف ملف-البرنامج، بدلًا من المعامل الأول في سطر الأوامر. يمكن استخدام خيارات -f متعددة. تُعامل الملفات المقروءة باستخدام -f كما لو كانت تبدأ بعبارة @namespace "awk" ضمنية.

-F fs، --field-separator fs
    استخدم fs لفاصل حقول الإدخال (قيمة المتغير المحدد مسبقًا FS).

-v var=val، --assign var=val
    أسند القيمة val إلى المتغير var، قبل بدء تنفيذ البرنامج. تكون قيم هذه المتغيرات متاحة لقاعدة BEGIN في برنامج AWK.

-b، --characters-as-bytes
    عامل جميع بيانات الإدخال كأحرف وحيدة البايت. يتجاوز الخيار --posix هذا الخيار.

-c، --traditional
    شغل في وضع التوافق. في وضع التوافق، يتصرف gawk بشكل مطابق لبرنامج awk الخاص ببرايان كيرنيغان؛ ولا يُتعرف على أي من امتدادات GNU الخاصة.

-C، --copyright
    اطبع النسخة القصيرة من رسالة معلومات حقوق النسخ لـ GNU على المخرج القياسي واخرج بنجاح.

-d[ملف]، --dump-variables[=ملف]
    اطبع قائمة مرتبة بالمتغيرات العامة وأنواعها وقيمها النهائية إلى ملف. الملف المبدئي هو awkvars.out في الدليل الحالي.

-D[ملف]، --debug[=ملف]
    مكّن تنقِيح برامج AWK. يقرأ المنقح الأوامر مبدئيًا بشكل تفاعلي من لوحة المفاتيح (المدخل القياسي). يحدد معامل الملف الاختياري ملفًا يحتوي على قائمة أوامر لينفذها المنقح بشكل غير تفاعلي.

    في هذا الوضع من التنفيذ، يحمل gawk كود مصدر AWK ثم يطلب أوامر التنقيح. يمكن لـ Gawk فقط تنقيح مصدر برنامج AWK الموفر عبر خياري -f و--include. المنقح موثق في GAWK: برمجة AWK الفعالة؛ انظر https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger.

-e نص-البرنامج، --source نص-البرنامج
    استخدم نص-البرنامج ككود مصدر لبرنامج AWK. تُعامل كل معامل يُوفر عبر -e كما لو كان يبدأ بعبارة @namespace "awk" ضمنية.

-E ملف، --exec ملف
    مشابه لـ -f، ومع ذلك، فإن هذا الخيار هو آخر خيار يُعالج. يجب استخدامه مع سكربتات #!، خاصة لتطبيقات CGI، لتجنب تمرير الخيارات أو كود المصدر (!) في سطر الأوامر من عنوان URL. يعطل هذا الخيار إسنادات المتغيرات في سطر الأوامر.

-g، --gen-pot
    افحص وحلل برنامج AWK، وولد ملفًا بتنسيق GNU .pot (قالب كائن محمول) على المخرج القياسي مع مدخلات لجميع السلاسل القابلة للترجمة في البرنامج. لا يُنفذ البرنامج نفسه.

-h، --help
    اطبع ملخصًا قصيرًا نسبيًا للخيارات المتاحة على المخرج القياسي. وفقًا لـ معايير ترميز GNU، تسبب هذه الخيارات خروجًا فوريًا وناجحًا.

-i ملف-تضمين، --include ملف-تضمين
    حمل مكتبة مصدر awk. يبحث هذا عن المكتبة باستخدام متغير البيئة AWKPATH. إذا فشل البحث الأولي، ستُجرى محاولة أخرى بعد إلحاق اللاحقة .awk. سيُحمل الملف مرة واحدة فقط (أي تُحذف التكرارات)، ولا يشكل الكود مصدر البرنامج الرئيس. تُعامل الملفات المقروءة باستخدام --include كما لو كانت تبدأ بعبارة @namespace "awk" ضمنية.

-I، --trace
    اطبع أسماء أكواد البايت الداخلية أثناء تنفيذها عند تشغيل البرنامج. يُطبع التتبع على الخطأ القياسي. يسبق كل “كود عملية” علامة + في المخرج.

-k، --csv
    مكّن المعالجة الخاصة لـ CSV. انظر القيم المفصولة بفواصل أدناه لمزيد من التفاصيل.

-l lib، --load lib
    حمل امتداد gawk من المكتبة المشتركة lib. يبحث هذا عن المكتبة باستخدام متغير البيئة AWKLIBPATH. إذا فشل البحث الأولي، ستُجرى محاولة أخرى بعد إلحاق لاحقة المكتبة المشتركة المبدئية للمنصة. يُتوقع أن يكون اسم روتين تهيئة المكتبة dl_load().

-L [قيمة]، --lint[=قيمة]
    قدم تحذيرات حول البنى المشبوهة أو غير القابلة للنقل إلى تطبيقات AWK الأخرى. انظر https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options للحصول على قائمة بالقيم الممكنة لـ القيمة.

-M، --bignum
    افرض الحساب التعسفي الدقة على الأرقام. ليس لهذا الخيار أي تأثير إذا لم يُصرف gawk لاستخدام مكتبي GNU MPFR وGMP. (في هذه الحالة، يصدر gawk تحذيرًا).

    ملاحظة: هذه الميزة تحت المراقبة. لم يعد وصي gawk الرئيس يدعمها، على الرغم من وجود عضو في فريق التطوير يدعمها. إذا تغير هذا الوضع، فستُزال الميزة من gawk.

-n، --non-decimal-data
    تعرف على القيم الثمانية والست عشرية في بيانات الإدخال. استخدم هذا الخيار بحذر شديد!

-N، --use-lc-numeric
    افرض على gawk استخدام حرف الفاصلة العشرية الخاص باللغة المحلية عند تحليل بيانات الإدخال.

-o[ملف]، --pretty-print[=ملف]
    أخرج نسخة منسقة بجمالية من البرنامج إلى ملف. الملف المبدئي هو awkprof.out في الدليل الحالي. يتضمن هذا الخيار --no-optimize.

-O، --optimize
    مكّن تحسينات gawk المبدئية على التمثيل الداخلي للبرنامج. هذا الخيار مفعل مبدئيًا.

-p[ملف-التشكيلة]، --profile[=ملف-التشكيلة]
    ابدأ جلسة تشكيل، وأرسل بيانات التشكيلة إلى ملف-التشكيلة. المبدئي هو awkprof.out في الدليل الحالي. تحتوي التشكيلة على أعداد تنفيذ كل عبارة في البرنامج في الهامش الأيسر وأعداد استدعاءات الدوال لكل دالة يعرفها المستخدم. يعمل Gawk ببطء أكبر في هذا الوضع. يتضمن هذا الخيار --no-optimize.

-P، --posix
    يفعل هذا وضع التوافق، ويعطل عددًا من الامتدادات الشائعة.

-r، --re-interval
    مكّن استخدام تعبيرات الفترات في مطابقة التعبيرات النمطية. تُمكن تعبيرات الفترات مبدئيًا، ولكن يظل هذا الخيار موجودًا للتوافق مع الإصدارات السابقة.

-s، --no-optimize
    عطل تحسينات gawk المبدئية على التمثيل الداخلي للبرنامج.

-S، --sandbox
    شغل gawk في وضع المعزل (sandbox)، مع تعطيل دالة system()، وإعادة توجيه الإدخال باستخدام getline، وإعادة توجيه الإخراج باستخدام print وprintf، وتحميل الامتدادات الديناميكية. يُعطل أيضًا تنفيذ الأوامر (عبر الأنابيب).

-t، --lint-old
    قدم تحذيرات حول البنى غير القابلة للنقل إلى النسخة الأصلية من awk لنظام UNIX.

-V، --الإصدارة
    اطبع معلومات الإصدارة لهذه النسخة المحددة من gawk على المخرج القياسي. هذا مفيد عند الإبلاغ عن العلل. وفقًا لـ معايير ترميز GNU، تسبب هذه الخيارات خروجًا فوريًا وناجحًا.

--  أشر إلى نهاية الخيارات. هذا مفيد للسماح للمعاملات الإضافية لبرنامج AWK نفسه بالبدء بـ “-”.

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

للتوافق مع POSIX، يمكن استخدام الخيار -W متبوعًا باسم خيار طويل.

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

    @include "اسم-الملف"
    @nsinclude "اسم-الملف"
    @load "اسم-الملف"
    @namespace "الاسم"
    النمط    { جمل الإجراء }
    function الاسم(قائمة المعاملات) { الجمل }

يقرأ Gawk أولًا مصدر البرنامج من ملفات-البرنامج إذا حُددت، أو من معاملات الخيار --source، أو من أول معامل ليس خيارًا في سطر الأوامر. يمكن استخدام الخيارين -f و --source مرات متعددة في سطر الأوامر. يقرأ Gawk نص البرنامج كما لو كانت كل ملفات-البرنامج ونصوص المصدر من سطر الأوامر قد دُمجت معًا.

بالإضافة إلى ذلك، يمكن استخدام الأسطر التي تبدأ بـ @include لتضمين ملفات مصدر أخرى في برنامجك. هذا يعادل استخدام الخيار --include.

تُضمن الأسطر التي تبدأ بـ @nsinclude الملفات أيضًا، ولكن مع فارقين. الأول، أن فضاء الأسماء في الملف المُضمن لا يُعاد ضبطه إلى المبدئي وهو awk، ويمكن تضمين مثل هذه الملفات عدة مرات.

يمكن استخدام الأسطر التي تبدأ بـ @load لتحميل وظائف الامتداد في برنامجك. هذا يعادل استخدام الخيار --load.

يحدد متغير البيئة AWKPATH مسار بحث لاستخدامه عند العثور على ملفات المصدر المسماة بالخيارين -f و --include. إذا لم يكن هذا المتغير موجودًا، فإن المسار المبدئي هو ".:/usr/local/share/awk". (قد يختلف الدليل الفعلي اعتمادًا على كيفية بناء وتثبيت gawk.) إذا كان اسم الملف المعطى للخيار -f يحتوي على محرف "/"، فلا يُجرى بحث في المسارات.

يحدد متغير البيئة AWKLIBPATH مسار بحث لاستخدامه عند العثور على ملفات المصدر المسماة بالخيار --load. إذا لم يكن هذا المتغير موجودًا، فإن المسار المبدئي هو "/usr/local/lib/gawk". (قد يختلف الدليل الفعلي اعتمادًا على كيفية بناء وتثبيت gawk.)

ينفذ Gawk برامج AWK بالترتيب التالي. أولًا، تُنفذ جميع تعيينات المتغيرات المحددة عبر الخيار -v. بعد ذلك، يصرف gawk البرنامج إلى شكل داخلي. ثم ينفذ gawk الشيفرة في قاعدة (قواعد) BEGIN (إن وجدت)، ثم ينتقل لقراءة كل ملف مسمى في مصفوفة ARGV (حتى ARGV[ARGC-1]). إذا لم توجد ملفات مسماة في سطر الأوامر، يقرأ gawk الدخل القياسي.

إذا كان لاسم ملف في سطر الأوامر الصيغة var=val فإنه يُعامل كتعيين متغير. سيُعين للمتغير var القيمة val. (يحدث هذا بعد تشغيل أي قاعدة (قواعد) BEGIN.)

إذا كانت قيمة عنصر معين في ARGV فارغة ("")، يتخطاها gawk.

لكل ملف دخل، إذا وجدت قاعدة BEGINFILE، ينفذ gawk الشيفرة المرتبطة بها قبل معالجة محتويات الملف. وبالمثل، ينفذ gawk الشيفرة المرتبطة بقواعد ENDFILE بعد معالجة الملف.

لكل سجل في الدخل، يختبر gawk ما إذا كان يطابق أي نمط في برنامج AWK. ولكل نمط يطابقه السجل، ينفذ gawk الإجراء المرتبط به. تُختبر الأنماط بالترتيب الذي وردت به في البرنامج.

أخيرًا، بعد استهلاك كل الدخل، ينفذ gawk الشيفرة في قاعدة (قواعد) END (إن وجدت).

  أدلة سطر الأوامر
وفقًا لمعيار POSIX، يجب أن تكون الملفات المسماة في سطر أوامر awk ملفات نصية. السلوك يكون "غير محدد" إذا لم تكن كذلك. تعامل معظم إصدارات awk وجود دليل في سطر الأوامر كخطأ فادح.

بالنسبة لـ gawk، ينتج عن وجود دليل في سطر الأوامر تحذير، ولكن يتم تخطيه بخلاف ذلك. إذا أُعطي أي من الخيارين --posix أو --traditional، فإن gawk يعود لمعاملة الأدلة في سطر الأوامر كخطأ فادح.

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

  السجلات
عادةً ما تُفصل السجلات بمحارف سطر جديد. يمكنك التحكم في كيفية فصل السجلات عن طريق تعيين قيم للمتغير المدمج RS. راجع https://www.gnu.org/software/gawk/manual/html_node/Records.html للمزيد من التفاصيل.

  الحقول
عند قراءة كل سجل دخل، يقسم gawk السجل إلى حقول، باستخدام قيمة المتغير FS كفاصل للحقول. بالإضافة إلى ذلك، يمكن استخدام FIELDWIDTHS و FPAT للتحكم في تقسيم حقول الدخل. راجع التفاصيل، بدءًا من https://www.gnu.org/software/gawk/manual/html_node/Fields.html.

يمكن الإشارة إلى كل حقل في سجل الدخل من خلال موضعه: $1، و $2، وهكذا. $0 هو السجل بأكمله، بما في ذلك المساحات البيضاء البادئة واللاحقة.

يُضبط المتغير NF على العدد الإجمالي للحقول في سجل الدخل.

تنتج الإشارات إلى حقول غير موجودة (أي الحقول بعد $NF) السلسلة الصفرية (null). ومع ذلك، فإن التعيين لحقل غير موجود (مثلاً $(NF+2) = 5) يزيد من قيمة NF، وينشئ أي حقول متدخلة بقيمة السلسلة الصفرية، ويؤدي إلى إعادة حساب قيمة $0، مع فصل الحقول بقيمة OFS. تسبب الإشارات إلى حقول مرقمة بالسالب خطأً فادحًا. يؤدي تقليل NF إلى فقدان قيم الحقول التي تتجاوز القيمة الجديدة، وإعادة حساب قيمة $0، مع فصل الحقول بقيمة OFS.

يؤدي تعيين قيمة لحقل موجود إلى إعادة بناء السجل بالكامل عند الإشارة إلى $0. وبالمثل، يؤدي تعيين قيمة لـ $0 إلى إعادة تقسيم السجل، مما يؤدي إلى إنشاء قيم جديدة للحقول.

  قيم مفصولة بفواصل (CSV)
عند استدعائه باستخدام الخيار -k أو --csv، لا يستخدم gawk تحديد السجلات المنتظم وتقسيم الحقول كما هو موضح أعلاه. بدلًا من ذلك، تُنهى السجلات بأسطر جديدة غير مقتبسة، وتُفصل الحقول بفاصلات. يمكن استخدام علامات الاقتباس المزدوجة لإحاطة الحقول التي تحتوي على فواصل، أو أسطر جديدة، أو علامات اقتباس مزدوجة مضاعفة. راجع https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html لمزيد من التفاصيل.

  المتغيرات المدمجة
متغيرات Gawk المدمجة مدرجة أدناه. هذه القائمة موجزة عمدًا. للتفاصيل، راجع https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.

ARGC
    عدد معاملات سطر الأوامر.

ARGIND
    الفهرس في ARGV للملف الحالي الذي تتم معالجته.

ARGV
    مصفوفة معاملات سطر الأوامر. المصفوفة مفهرسة من 0 إلى ARGC - 1.

BINMODE
    في الأنظمة غير المتوافقة مع POSIX، يحدد استخدام الوضع "الثنائي" لجميع عمليات الإدخال والإخراج للملفات. راجع https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html للمزيد من التفاصيل.

CONVFMT
    تنسيق التحويل للأرقام، "%.6g" مبدئيًا.

ENVIRON
    مصفوفة تحتوي على قيم البيئة الحالية. المصفوفة مفهرسة بواسطة متغيرات البيئة، وكل عنصر هو قيمة ذلك المتغير.

ERRNO
    إذا حدث خطأ في النظام سواء أثناء إجراء إعادة توجيه لـ getline، أو أثناء القراءة لـ getline، أو أثناء close()، فسيُضبط ERRNO على سلسلة نصية تصف الخطأ. القيمة قابلة للترجمة في المناطق المحلية غير الإنجليزية.

FIELDWIDTHS
    قائمة بعروض الحقول تفصل بينها مسافات بيضاء. عند ضبطها، يحلل gawk الدخل إلى حقول ذات عرض ثابت، بدلًا من استخدام قيمة المتغير FS كفاصل للحقول. قد يُسبق كل عرض حقل اختيارياً بقيمة مفصولة بنقطتين تحدد عدد المحارف المطلوب تخطيها قبل بدء الحقل.

FILENAME
    اسم ملف الدخل الحالي. إذا لم تُحدد أي ملفات في سطر الأوامر، تكون قيمة FILENAME هي "-". ومع ذلك، FILENAME غير معرف داخل قاعدة BEGIN (ما لم يُضبط بواسطة getline).

FNR رقم سجل الدخل في ملف الدخل الحالي.

FPAT
    تعبير نمطي يصف محتويات الحقول في سجل ما. عند ضبطه، يحلل gawk الدخل إلى حقول، حيث تطابق الحقول التعبير النمطي، بدلًا من استخدام قيمة FS كفاصل للحقول.

FS  فاصل حقول الدخل، وهو مسافة مبدئيًا. راجع https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html للمزيد من التفاصيل.

FUNCTAB
    مصفوفة فهارسها والقيم المقابلة لها هي أسماء جميع الدوال المعرفة من قبل المستخدم أو دوال الامتداد في البرنامج. ملاحظة: لا يجوز لك استخدام جملة delete مع مصفوفة FUNCTAB.

IGNORECASE
    يتحكم في حساسية حالة الأحرف لجميع عمليات التعبيرات النمطية وسلاسل النصوص. راجع https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html للمزيد من التفاصيل.

LINT
    يوفر تحكمًا ديناميكيًا في خيار --lint من داخل برنامج AWK.

NF  عدد الحقول في سجل الدخل الحالي.

NR  العدد الإجمالي لسجلات الدخل التي شوهدت حتى الآن.

OFMT
    تنسيق الإخراج للأرقام، "%.6g" مبدئيًا.

OFS فاصل حقول الإخراج، وهو مسافة مبدئيًا.

ORS فاصل سجلات الإخراج، وهو سطر جديد مبدئيًا.

PREC
    دقة العمل للأرقام ذات الفاصلة العائمة عشوائية الدقة، وهي 53 مبدئيًا.

PROCINFO
    توفر عناصر هذه المصفوفة إمكانية الوصول إلى معلومات حول برنامج AWK قيد التشغيل. راجع https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset للمزيد من التفاصيل.

ROUNDMODE
    وضع التقريب المراد استخدامه للحساب عشوائي الدقة على الأرقام، مبدئيًا "N" (IEEE-754 وضع roundTiesToEven). راجع https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode للمزيد من التفاصيل.

RS  فاصل سجلات الدخل، وهو سطر جديد مبدئيًا.

RT  خاتمة السجل. يضبط Gawk قيمة RT على نص الدخل الذي طابق المحرف أو التعبير النمطي المحدد بواسطة RS.

RSTART
    فهرس المحرف الأول الذي طابقته match()؛ 0 إذا لم يوجد تطابق.

RLENGTH
    طول السلسلة التي طابقتها match()؛ -1 إذا لم يوجد تطابق.

SUBSEP
    السلسلة المستخدمة لفصل العناصر الفرعية المتعددة في عناصر المصفوفة، مبدئيًا "\034".

SYMTAB
    مصفوفة فهارسها هي أسماء جميع المتغيرات والمصفوفات العامة المعرفة حاليًا في البرنامج. لا يجوز لك استخدام جملة delete مع مصفوفة SYMTAB، ولا التعيين لعناصر بفهرس ليس اسم متغير.

TEXTDOMAIN
    نطاق نص برنامج AWK؛ يُستخدم للعثور على الترجمات المحلية لسلاسل نصوص البرنامج.

  المصفوفات
تُفهرس المصفوفات بتعبير بين أقواس مربعة ([ و ]). إذا كان التعبير عبارة عن قائمة تعبيرات (تعبير، تعبير ...) فإن فهرس المصفوفة هو سلسلة نصية تتكون من دمج قيمة (السلسلة) لكل تعبير، مفصولة بقيمة متغير SUBSEP. تُستخدم هذه الإمكانية لمحاكاة المصفوفات متعددة الأبعاد. على سبيل المثال:

    i = "A"; j = "B"; k = "C"
    x[i, j, k] = "hello, world\n"

يعين السلسلة "hello, world\n" لعنصر المصفوفة x المفهرس بالسلسلة "A\034B\034C". جميع المصفوفات في AWK ترابطية، أي أنها مفهرسة بقيم سلاسل نصية.

يمكن استخدام العامل الخاص in لاختبار ما إذا كانت المصفوفة تحتوي على فهرس يتكون من قيمة معينة:

    if (val in array) 	print array[val]

إذا كانت المصفوفة تحتوي على فهارس متعددة، فاستخدم (i, j) in array.

يمكن استخدام بنية in أيضًا في حلقة for للتكرار على جميع عناصر المصفوفة. ومع ذلك، فإن بنية (i, j) in array لا تعمل إلا في الاختبارات، وليس في حلقات for.

يمكن حذف عنصر من مصفوفة باستخدام عبارة delete. كما يمكن استخدام عبارة delete لحذف كامل محتويات المصفوفة، وذلك بمجرد تحديد اسم المصفوفة دون دليل سفلي.

يدعم gawk المصفوفات حقيقية التعدد في الأبعاد. ولا يشترط أن تكون هذه المصفوفات «مستطيلة» كما هو الحال في C أو ++C. راجع https://www.gnu.org/software/gawk/manual/html_node/Arrays لمزيد من التفاصيل.

  فضاءات الأسماء
يوفر Gawk خاصية فضاء أسماء بسيطة للمساعدة في الالتفاف على حقيقة أن جميع المتغيرات في AWK هي متغيرات عامة.

يتكون الاسم المؤهل من معرفين بسيطين يربط بينهما نقطتان مزدوجتان (::). يمثل المعرف الأيسر فضاء الأسماء، ويمثل المعرف الأيمن المتغير بداخله. تعتبر جميع الأسماء البسيطة (غير المؤهلة) في فضاء الأسماء «الحالي»؛ وفضاء الأسماء المبدئي هو awk. ومع ذلك، فإن المعرفات البسيطة التي تتكون حصراً من أحرف كبيرة تُجبر على الدخول في فضاء أسماء awk، حتى لو كان فضاء الأسماء الحالي مختلفاً.

يمكنك تغيير فضاء الأسماء الحالي باستخدام توجيه @namespace "الاسم".

لا يجوز استخدام أسماء الدوال المدمجة القياسية والمعرفة مسبقاً كأسماء لفضاءات الأسماء. ويمكن استخدام أسماء الدوال الإضافية التي يوفرها gawk كأسماء لفضاءات أسماء أو كمعرفات بسيطة في فضاءات أسماء أخرى. لمزيد من التفاصيل، راجع https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.

  تنميط المتغيرات وتحويلها
قد تكون المتغيرات والحقول أرقاماً (بفاصلة عائمة)، أو سلاسل نصية، أو كليهما. وقد تكون أيضًا تعبيرات نمطية. ويعتمد تفسير قيمة المتغير على سياقه. فإذا استخدم في تعبير عددي، عومل كعدد؛ وإذا استخدم كسلسلة نصية عومل كسلسلة نصية.

لإجبار متغير على أن يُعامل كعدد، أضف صفراً إليه؛ ولإجباره على أن يُعامل كسلسلة نصية، ادمجه مع السلسلة الفارغة.

المتغيرات غير المهيأة لها القيمة العددية صفر وقيمة السلسلة النصية "" (السلسلة الصففرية أو الفارغة).

عندما يجب تحويل سلسلة نصية إلى عدد، يُنجز التحويل باستخدام strtod(3). ويُحول العدد إلى سلسلة نصية باستخدام قيمة CONVFMT كسلسلة تنسيق لـ sprintf(3)، مع استخدام القيمة العددية للمتغير كمعامل. ومع ذلك، رغم أن جميع الأعداد في AWK هي بفاصلة عائمة، إلا أن القيم الصحيحة تُحول دائماً كأعداد صحيحة.

يجري Gawk المقارنات على النحو التالي: إذا كان المتغيران عدديين، تجري المقارنة عددياً. وإذا كانت إحدى القيمتين عددية والأخرى لها قيمة نصية وهي عبارة عن «سلسلة نصية عددية»، فتجري المقارنات أيضًا عددياً. خلاف ذلك، تُحول القيمة العددية إلى سلسلة نصية وتُجرى مقارنة نصية. وتتم مقارنة السلسلتين النصيتين، بطبيعة الحال، كسلاسل نصية.

لاحظ أن الثوابت النصية، مثل "57"، ليست سلاسل نصية عددية، بل هي ثوابت نصية. تنطبق فكرة «السلسلة النصية العددية» فقط على الحقول، ومدخلات getline، وFILENAME، وعناصر ARGV، وعناصر ENVIRON وعناصر المصفوفة التي أُنشئت بواسطة split() أو patsplit() والتي تكون سلاسل نصية عددية. الفكرة الأساسية هي أن مدخلات المستخدم، وفقط مدخلات المستخدم التي تبدو عددية، يجب أن تُعامل بهذه الطريقة.

  الثوابت الثمانية والست عشرية
يمكنك استخدام الثوابت الثمانية والست عشرية بنمط لغة C في كود المصدر لبرنامج AWK الخاص بك. على سبيل المثال، القيمة الثمانية 011 تساوي 9 بالعشري، والقيمة الست عشرية 0x11 تساوي 17 بالعشري.

  الثوابت النصية
الثوابت النصية في AWK هي تسلسلات من المحارف المحصورة بين علامتي اقتباس مزدوجتين (مثل "قيمة"). داخل السلاسل النصية، يُتعرف على بعض تسلسلات الهروب، كما هو الحال في C. راجع https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences لمزيد من التفاصيل.

  ثوابت التعبيرات النمطية
ثابت التعبير النمطي هو تسلسل من المحارف المحصورة بين خطين مائلين للأمام (مثل /قيمة/).

يمكن أيضًا استخدام تسلسلات الهروب الموضحة في الدليل داخل التعبيرات النمطية الثابتة (مثل، /[ \t\f\n\r\v]/ يطابق محارف المسافات البيضاء).

يوفر Gawk ثوابت تعبيرات نمطية قوية التنميط. وتُكتب مبدوءة برمز @ (مثل هكذا: @/قيمة/). يمكن تخصيص هذه الثوابت للمتغيرات القياسية (متغيرات، عناصر مصفوفة) وتمريرها إلى الدوال التي يعرفها المستخدم. المتغيرات التي خصصت بهذه الطريقة تصبح من نوع تعبير نمطي.

الأنماط والإجراءات
AWK هي لغة سطرية المنحى. يأتي النمط أولاً، ثم الإجراء. تُحصر عبارات الإجراء داخل { و}. يمكن أن يغيب النمط، أو يغيب الإجراء، ولكن ليس كليهما بالطبع. إذا غاب النمط، ينفذ الإجراء لكل سجل من سجلات المدخلات. وغياب الإجراء يعادل

    { print }

التي تطبع السجل كاملاً.

تبدأ التعليقات بمحرف #، وتستمر حتى نهاية السطر. ويمكن استخدام الأسطر الفارغة للفصل بين العبارات. عادةً ما تنتهي العبارة بسطر جديد، ومع ذلك، ليس هذا هو الحال بالنسبة للأسطر التي تنتهي بفاصلة، أو {، أو ?، أو :، أو &&، أو ||. والأسطر التي تنتهي بـ do أو else تستمر عباراتها آلياً في السطر التالي. في حالات أخرى، يمكن مواصلة السطر بإنهاء السطر بـ «\»، وفي هذه الحالة يُتجاهل السطر الجديد. ومع ذلك، فإن «\» بعد # ليست ذات ميزة خاصة.

يمكن وضع عبارات متعددة في سطر واحد بالفصل بينها بـ «;». وينطبق هذا على العبارات داخل جزء الإجراء في زوج النمط-الإجراء (الحالة المعتادة)، وعلى عبارات النمط-الإجراء نفسها.

  الأنماط
قد تكون أنماط AWK أحد ما يلي:

    BEGIN
    END
    BEGINFILE
    ENDFILE
    /تعبير نمطي/
    تعبير علائقي
    نمط && نمط
    نمط || نمط
    نمط ? نمط : نمط
    (نمط)
    ! نمط
    نمط1, نمط2

BEGIN وEND هما نوعان خاصان من الأنماط لا يتم اختبارهما مقابل المدخلات. تُدمج أجزاء الإجراء لجميع أنماط BEGIN كما لو كانت جميع العبارات قد كُتبت في قاعدة BEGIN واحدة. وتُنفذ قبل قراءة أي من المدخلات. وبالمثل، تُدمج جميع قواعد END، وتُنفذ عند نفاد جميع المدخلات (أو عند تنفيذ عبارة exit). لا يمكن دمج نمطي BEGIN وEND مع أنماط أخرى في تعبيرات الأنماط. كما لا يمكن أن يغيب جزء الإجراء في نمطي BEGIN وEND.

BEGINFILE وENDFILE هما أنماط خاصة إضافية تُنفذ إجراءاتها قبل قراءة السجل الأول من كل ملف مدخلات في سطر الأوامر وبعد قراءة السجل الأخير من كل ملف. داخل قاعدة BEGINFILE، تكون قيمة ERRNO هي السلسلة الفارغة إذا فُتح الملف بنجاح. وخلاف ذلك، فهناك مشكلة ما في الملف ويجب أن يستخدم الكود nextfile لتخطيه. إذا لم يُفعل ذلك، فإن gawk يصدر خطأه الفادح المعتاد للملفات التي لا يمكن فتحها.

بالنسبة لأنماط /التعبير النمطي/، تُنفذ العبارة المرتبطة به لكل سجل مدخلات يطابق التعبير النمطي. التعبيرات النمطية هي نفسها جوهرياً تلك الموجودة في egrep(1). راجع https://www.gnu.org/software/gawk/manual/html_node/Regexp.html لمزيد من التفاصيل حول التعبيرات النمطية.

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

المعاملات && و|| و! هي معامل «و» المنطقي، و«أو» المنطقي، و«ليس» المنطقي على التوالي، كما في C. وهي تجري تقييماً قصير المدى (short-circuit)، كما في C أيضاً، وتُستخدم لدمج تعبيرات الأنماط الأكثر بساطة. وكما هو الحال في معظم اللغات، يمكن استخدام الأقواس لتغيير ترتيب التقييم.

المعامل ?: هو مثل نفس المعامل في C. إذا كان النمط الأول صحيحاً فإن النمط المستخدم للاختبار هو النمط الثاني، وإلا فهو الثالث. يتم تقييم واحد فقط من النمطين الثاني أو الثالث.

يُسمى شكل التعبير نمط1, نمط2 بـ نمط النطاق. فهو يطابق جميع سجلات المدخلات بدءاً من السجل الذي يطابق نمط1، ويستمر حتى السجل الذي يطابق نمط2، بما في ذلك السجلين. ولا يمتزج مع أي نوع آخر من تعبيرات الأنماط.

  الإجراءات
تُحصر عبارات الإجراء بين أقواس معقوفة، { و}. وتتكون عبارات الإجراء من عبارات التخصيص والشرط والحلقات المعتادة الموجودة في معظم اللغات. والمعاملات وعبارات التحكم وعبارات الإدخال/الإخراج المتاحة مصممة على غرار تلك الموجودة في لغة C.

  المعاملات
المعاملات في AWK، بترتيب تنازلي للأولوية، هي:

(...)
    التجميع

$   مرجع الحقل.

++ --
    الزيادة والنقصان، كلاهما قبلي وبعدي.

^   الرفع للقوة (الأس).

+ - !
    الزائد الأحادي، والناقص الأحادي، والنفي المنطقي.

* / %
    الضرب والقسمة وباقي القسمة.

+ - الجمع والطرح.

space
    دمج السلاسل النصية.

|   |&
    دخل/خرج موجه لكل من getline وprint وprintf.

< > <= >= == !=
    المعاملات العلائقية العادية.

~ !~
    مطابقة التعبير النمطي، والمطابقة المنفية.

in  عضوية المصفوفة.

&&  «و» المنطقية.

||  «أو» المنطقية.

?:  التعبير الشرطي للغة C. وله الصيغة تعبير1 ? تعبير2 : تعبير3. إذا كان تعبير1 صحيحاً، فإن قيمة التعبير هي تعبير2، وإلا فهي تعبير3. يتم تقييم واحد فقط من التعبيرين تعبير2 أو تعبير3.

= += -= *= /= %= ^=
    التخصيص. كلاهما مدعوم: التخصيص المطلق (متغير = قيمة) وتخصيص المعامل (الأشكال الأخرى).

  عبارات التحكم
عبارات التحكم هي كما يلي:

    if (شرط) عبارة [ else عبارة ]
    while (شرط) عبارة
    do عبارة while (شرط)
    for (تعبير1; تعبير2; تعبير3) عبارة
    for (متغير in مصفوفة) عبارة
    break
    continue
    delete مصفوفة[دليل]
    delete مصفوفة
    exit [ تعبير ]
    { عبارات }
    switch (تعبير) { case قيمة|تعبير_نمطي : عبارة ... [ default: عبارة ]
    }

  عبارات الدخل/الخرج
عبارات الإدخال/الإخراج هي كما يلي:

close(ملف [, كيف])
    أغلق ملفاً مفتوحاً أو أنبوباً أو عملية مرافقة. المعامل الاختياري كيف يجب استخدامه فقط عند إغلاق طرف واحد من أنبوب ثنائي الاتجاه إلى عملية مرافقة. يجب أن يكون قيمة نصية، إما "to" أو "from".

getline
    عيّن قيمة $0 من سجل المدخلات التالي؛ وعيّن قيم NF وNR وFNR وRT.

getline <ملف
    عيّن قيمة $0 من السجل التالي في الملف؛ وعيّن قيم NF وRT.

getline متغير
    عيّن قيمة المتغير من سجل المدخلات التالي؛ وعيّن قيم NR وFNR وRT.

getline متغير <ملف
    عيّن قيمة المتغير من السجل التالي في الملف؛ وعيّن قيمة RT.

أمر | getline [متغير]
    نفذ الأمر، مع توجيه الخرج إما إلى $0 أو المتغير، كما هو موضح أعلاه، وإلى RT.

أمر |& getline [متغير]
    نفذ الأمر كعملية مرافقة مع توجيه الخرج إما إلى $0 أو المتغير، كما هو موضح أعلاه، وإلى RT. (يمكن أن يكون الأمر أيضًا مقبساً. راجع القسم الفرعي أسماء الملفات الخاصة أدناه.)

fflush([ملف])
    أفرغ أي مخازن وسيطة مرتبطة بـ الملف أو الأنبوب المفتوح للخرج. إذا كان الملف غائباً أو كان سلسلة صفرية، فأفرغ جميع ملفات وأنابيب الخرج المفتوحة.

next
    توقف عن معالجة سجل المدخلات الحالي. اقرأ سجل المدخلات التالي وابدأ المعالجة من جديد مع النمط الأول في برنامج AWK. عند الوصول إلى نهاية بيانات المدخلات، تُنفذ أي قاعدة (قواعد) END.

nextfile
    توقف عن معالجة ملف المدخلات الحالي. سجل المدخلات التالي الذي سيُقرأ سيأتي من ملف المدخلات التالي. حَدّث FILENAME وARGIND، وأعد تعيين FNR إلى 1، وابدأ المعالجة من جديد مع النمط الأول في برنامج AWK. عند الوصول إلى نهاية بيانات المدخلات، تُنفذ أي قاعدة (قواعد) ENDFILE وEND.

print
    اطبع السجل الحالي. يُنهى سجل المخرجات بقيمة ORS.

print expr-list
    اطبع التعبيرات. يُفصل بين كل تعبير بكلمة OFS. يُنهى سجل المخرجات بقيمة ORS.

print expr-list >file
    اطبع التعبيرات في file. يُفصل بين كل تعبير بقيمة OFS. يُنهى سجل المخرجات بقيمة ORS.

printf fmt, expr-list
    نسّق واطبع.

printf fmt, expr-list >file
    نسّق واطبع في file.

system(cmd-line)
    نفّذ الأمر cmd-line، وأعد حالة الخروج. (قد لا يتوفر هذا في أنظمة غير POSIX.) راجع https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions للحصول على كامل التفاصيل حول حالة الخروج.

يُسمح بإعادة توجيه مخرجات إضافية لـ print و printf.

print ... >> file
    ألحق المخرجات بـ file.

print ... | command
    اكتب في أنبوب.

print ... |& command
    أرسل البيانات إلى عملية مرافقة أو مقبس. (راجع أيضًا القسم الفرعي Special File Names أدناه.)

تُعيد دالة getline القيمة 1 عند النجاح، وصفرًا عند نهاية الملف، و -1 عند حدوث خطأ. إذا أشارت قيمة errno(3) إلى إمكانية إعادة محاولة عملية الإدخال/الإخراج، وضُبطت PROCINFO["input", "RETRY"]، تُعاد القيمة -2 بدلًا من -1، ويمكن محاولة استدعاءات أخرى لـ getline. عند حدوث خطأ، تُضبط ERRNO بسلسلة تصف المشكلة.

ملاحظة: الفشل في فتح مقبس ثنائي الاتجاه يؤدي إلى إرجاع خطأ غير فتاك إلى الدالة المستدعِية. في حال استخدام أنبوب أو عملية مرافقة أو مقبس مع getline، أو من print أو printf داخل حلقة، يجب استخدام close() لإنشاء نسخ جديدة من الأمر أو المقبس. لا يغلق AWK الأنابيب أو المقابس أو العمليات المرافقة آليًا عند إرجاعها لعلامة نهاية الملف (EOF).

تتشابه إصدارات AWK من جملة printf ودالة sprintf() مع تلك الموجودة في لغة C. للتفاصيل، راجع https://www.gnu.org/software/gawk/manual/html_node/Printf.html.

  أسماء الملفات الخاصة
عند إجراء إعادة توجيه للإدخال/الإخراج من print أو printf إلى ملف، أو عبر getline من ملف، يتعرف gawk على أسماء ملفات خاصة داخليًا. تسمح أسماء الملفات هذه بالوصول إلى واصفات الملفات المفتوحة الموروثة من العملية الأب لـ gawk (عادةً الصدفة). يمكن أيضًا استخدام أسماء الملفات هذه في سطر الأوامر لتسمية ملفات البيانات. أسماء الملفات هي:

-   الإدخال القياسي.

/dev/stdin
    الإدخال القياسي.

/dev/stdout
    المخرجات القياسية.

/dev/stderr
    مخرجات الخطأ القياسية.

/dev/fd/n
    الملف المرتبط بواصف الملف المفتوح n.

يمكن استخدام أسماء الملفات الخاصة التالية مع عامل العملية المرافقة |& لإنشاء اتصالات شبكة TCP/IP:

/inet/tcp/lport/rhost/rport
/inet4/tcp/lport/rhost/rport
/inet6/tcp/lport/rhost/rport
    ملفات لاتصال TCP/IP على المنفذ المحلي lport بالمضيف البعيد rhost على المنفذ البعيد rport. استخدم المنفذ 0 ليقوم النظام باختيار منفذ. استخدم /inet4 لفرض اتصال IPv4، و /inet6 لفرض اتصال IPv6. تستخدم /inet المجردة القيمة المبدئية للنظام (على الأرجح IPv4). صالحة للاستخدام فقط مع عامل الإدخال/الإخراج ثنائي الاتجاه |&.

/inet/udp/lport/rhost/rport
/inet4/udp/lport/rhost/rport
/inet6/udp/lport/rhost/rport
    مشابه، ولكن يستخدم UDP/IP بدلًا من TCP/IP. دعم UDP مهجور وسيُزال في المستقبل.

  الدوال العددية
يحتوي AWK على الدوال الحسابية المضمنة التالية:

atan2(y, x)
    أعد ظل الزاوية العكسي لـ y/x بالراديان.

cos(expr)
    أعد جيب تمام expr، والمقدر بالراديان.

exp(expr)
    الدالة الأسية.

int(expr)
    بتر إلى عدد صحيح.

log(expr)
    دالة اللوغاريتم الطبيعي.

rand()
    أعد عددًا عشوائيًا N، بين الصفر والواحد، بحيث يكون 0 ≤ N < 1.

sin(expr)
    أعد جيب expr، والمقدر بالراديان.

sqrt(expr)
    أعد الجذر التربيعي لـ expr.

srand([expr])
    استخدم expr كبذرة جديدة لمولد الأعداد العشوائية. إذا لم يُوفّر expr، استخدم وقت اليوم. أعد البذرة السابقة لمولد الأعداد العشوائية.

  دوال السلاسل النصية
يحتوي Gawk على دوال السلاسل النصية المضمنة التالية؛ التفاصيل متوفرة في https://www.gnu.org/software/gawk/manual/html_node/String-Functions.

asort(s [, d [, how] ])
    أعد عدد العناصر في المصفوفة المصدر s. فرز محتويات s باستخدام قواعد gawk العادية لمقارنة القيم، واستبدل فهارس القيم المفروزة s بأعداد صحيحة متسلسلة تبدأ من 1. إذا حُددت مصفوفة الوجهة الاختيارية d، انسخ s أولًا إلى d، ثم افرز d، مع ترك فهارس المصفوفة المصدر s دون تغيير. تتحكم السلسلة النصية الاختيارية how في اتجاه ووضع المقارنة. القيم الصالحة لـ how موصوفة في https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions. يُسمح لـ s و d بأن يكونا نفس المصفوفة؛ وهذا يكون منطقيًا فقط عند توفير الوسيط الثالث أيضًا.

asorti(s [, d [, how] ])
    أعد عدد العناصر في المصفوفة المصدر s. السلوك هو نفسه سلوك asort()، باستثناء استخدام فهارس (indices) المصفوفة للفرز، وليس قيم المصفوفة. عند الانتهاء، تُفهرس المصفوفة عدديًا، وتكون القيم هي الفهارس الأصلية. تُفقد القيم الأصلية؛ لذا وفّر مصفوفة ثانية إذا كنت ترغب في الحفاظ على الأصل. الغرض من السلسلة النصية الاختيارية how هو نفسه في asort(). هنا أيضًا، يُسمح لـ s و d بأن يكونا نفس المصفوفة؛ وهذا يكون منطقيًا فقط عند توفير الوسيط الثالث أيضًا.

gensub(r, s, h [, t])
    ابحث في السلسلة المستهدفة t عن تطابقات للتعبير النمطي r. إذا كانت h سلسلة تبدأ بـ g أو G، فاستبدل كل تطابقات r بـ s. خلاف ذلك، h هو رقم يشير إلى أي تطابق لـ r يجب استبداله. إذا لم يُوفّر t، استخدم $0 بدلًا منه. داخل نص الاستبدال s، يمكن استخدام التسلسل \n، حيث n رقم من 1 إلى 9، للإشارة فقط إلى النص الذي طابق التعبير الفرعي المحصور بين قوسين رقم n. يمثل التسلسل \0 كامل النص المطابق، وكذلك يفعل الحرف &. على عكس sub() و gsub()، تُعاد السلسلة المعدلة كنتيجة للدالة، ولا تُغير السلسلة المستهدفة الأصلية.

gsub(r, s [, t])
    لكل سلسلة فرعية تطابق التعبير النمطي r في السلسلة t، استبدلها بالسلسلة s، وأعد عدد الاستبدالات. إذا لم يُوفّر t، استخدم $0. يُستبدل أي وسم & في نص الاستبدال بالنص الذي طُوبق فعليًا. استخدم \& للحصول على & حرفي. (يجب كتابة هذا كـ "\\&"؛ راجع https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details لمناقشة أوفى حول قواعد علامات الآند (ampersands) والشرطات المائلة الخلفية في نص الاستبدال لـ sub() و gsub() و gensub().)

index(s, t)
    أعد فهرس السلسلة t في السلسلة s، أو صفرًا إذا كانت t غير موجودة. (وهذا يعني أن فهارس الحروف تبدأ من واحد.)

length([s])
    أعد طول السلسلة s، أو طول $0 إذا لم تُوفّر s. مع وسيط مصفوفة، تعيد length() عدد العناصر في المصفوفة.

match(s, r [, a])
    أعد الموضع في s حيث يظهر التعبير النمطي r، أو صفرًا إذا كان r غير موجود، واضبط قيم RSTART و RLENGTH. لاحظ أن ترتيب الوسائط هو نفسه بالنسبة لعامل ~: str ~ re. راجع https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions لوصف كيفية ملء المصفوفة a إذا تم توفيرها.

patsplit(s, a [, r [, seps] ])
    قسّم السلسلة s إلى المصفوفة a ومصفوفة الفواصل seps بناءً على التعبير النمطي r، وأعد عدد الحقول. قيم العناصر هي أجزاء s التي طابقت r. قيمة seps[i] هي الفاصل (الذي قد يكون فارغًا) الذي ظهر بعد a[i]. قيمة seps[0] هي الفاصل البادئ (الذي قد يكون فارغًا). إذا حُذف r، تُستخدم FPAT بدلًا منه. تُمسح المصفوفتان a و seps أولًا. يسلك التقسيم سلوكًا مطابقًا لتقسيم الحقول باستخدام FPAT.

split(s, a [, r [, seps] ])
    قسّم السلسلة s إلى المصفوفة a ومصفوفة الفواصل seps بناءً على التعبير النمطي r، وأعد عدد الحقول. إذا حُذف r، تُستخدم FS بدلًا منه. تُمسح المصفوفتان a و seps أولًا. seps[i] هو فاصل الحقول الذي طابقه r بين a[i] و a[i+1]. يسلك التقسيم سلوكًا مطابقًا لتقسيم الحقول.

sprintf(fmt, expr-list)
    اطبع expr-list وفقًا لـ fmt، وأعد السلسلة الناتجة.

strtonum(str)
    افحص str، وأعد قيمتها العددية. إذا بدأت str بصفر 0 بادئ، فتعامل معها كعدد ثماني. إذا بدأت بـ 0x أو 0X بادئة، فتعامل معها كعدد ست عشري. خلاف ذلك، افترض أنها عدد عشري.

sub(r, s [, t])
    تمامًا مثل gsub()، ولكن تستبدل فقط أول سلسلة فرعية مطابقة. تعيد إما صفرًا أو واحدًا.

substr(s, i [, n])
    أعد السلسلة الفرعية المكونة من n حرفًا على الأكثر من s بدءًا من i. إذا حُذف n، استخدم بقية s.

tolower(str)
    أعد نسخة من السلسلة str، مع تحويل جميع الأحرف الكبيرة في str إلى مقابلاتها الصغيرة. تُترك الأحرف غير الأبجدية دون تغيير.

toupper(str)
    أعد نسخة من السلسلة str، مع تحويل جميع الأحرف الصغيرة في str إلى مقابلاتها الكبيرة. تُترك الأحرف غير الأبجدية دون تغيير.

يدعم Gawk المحارف متعددة البايتات. وهذا يعني أن index() و length() و substr() و match() تعمل جميعها من منظور المحارف، وليس البايتات.

  دوال الوقت
يوفر Gawk الدوال التالية للحصول على الطوابع الزمنية وتنسيقها. التفاصيل متوفرة في https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.

mktime(datespec [, utc-flag])
    حوّل datespec إلى طابع زمني بنفس الشكل الذي تعيده دالة systime()، وأعد النتيجة. إذا وُجد utc-flag وكان غير صفري أو غير فارغ، يُفترض أن الوقت بنظام UTC؛ وخلاف ذلك، يُفترض أن الوقت بالتوقيت المحلي. إذا لم تحتوي datespec على عناصر كافية أو إذا كان الوقت الناتج خارج النطاق، تعيد mktime() القيمة -1. راجع https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions لتفاصيل datespec.

strftime([التنسيق [, الطابع_الزمني[, علم_utc]]])
    يُنَسَّق الطابع_الزمني وفقًا للمواصفات في التنسيق. إذا وُجد علم_utc وكان غير صفري أو غير فارغ، فستكون النتيجة بتوقيت UTC، وإلا فستكون النتيجة بالتوقيت المحلي. يجب أن يكون الطابع_الزمني على نفس الهيئة التي تعيدها systime(). إذا فُقد الطابع_الزمني، فسيُستخدم وقت اليوم الحالي. إذا فُقد التنسيق، فسيُستخدم تنسيق مبدئي يعادل مخرجات date(1). التنسيق المبدئي متاح في PROCINFO["strftime"]. انظر مواصفات دالة strftime() في ISO C لمعرفة تحويلات التنسيق المضمون توافرها.

systime()
    تُعيد وقت اليوم الحالي كعدد الثواني منذ حقبة (1970-01-01 00:00:00 UTC على أنظمة POSIX).

  دوال معالجة البتات
يوفر Gawk دوال معالجة البتات التالية. وتعمل عن طريق تحويل قيم الفاصلة العائمة مزدوجة الدقة إلى أعداد صحيحة من نوع uintmax_t، ثم تُجرى العملية، وتُحول النتيجة مرة أخرى إلى فاصلة عائمة. يؤدي تمرير معاملات سالبة إلى أي من هذه الدوال إلى حدوث خطأ فادح.

الدوال هي:

and(v1, v2 [, ...])
    تُعيد نتيجة عملية AND الثنائية (bitwise) للقيم المقدمة في قائمة المعاملات. يجب تقديم اثنين على الأقل.

compl(val)
    تُعيد المتمم الثنائي (bitwise complement) لـ val.

lshift(val, count)
    تُعيد قيمة val، بعد إزاحتها لليسار بمقدار count من البتات.

or(v1, v2 [, ...])
    تُعيد نتيجة عملية OR الثنائية للقيم المقدمة في قائمة المعاملات. يجب تقديم اثنين على الأقل.

rshift(val, count)
    تُعيد قيمة val، بعد إزاحتها لليمين بمقدار count من البتات.

xor(v1, v2 [, ...])
    تُعيد نتيجة عملية XOR الثنائية للقيم المقدمة في قائمة المعاملات. يجب تقديم اثنين على الأقل.

  دوال الأنواع
توفر الدوال التالية معلومات متعلقة بالأنواع حول معاملاتها.

isarray(x)
    تُعيد صحيحًا (true) إذا كان x مصفوفة، وخاطئًا (false) خلاف ذلك.

typeof(x)
    تُعيد سلسلة نصية تشير إلى نوع x. ستكون السلسلة واحدة من "array"، أو "number"، أو "regexp"، أو "string"، أو "strnum"، أو "unassigned"، أو "untyped".

  دوال التدويل
يمكن استخدام الدوال التالية من داخل برنامج AWK لترجمة السلاسل النصية أثناء وقت التشغيل. للحصول على التفاصيل الكاملة، انظر https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.

bindtextdomain(الدليل [, النطاق])
    تحدد الدليل الذي يبحث فيه gawk عن ملفات .gmo، في حال لم توضع أو تعذر وضعها في المواقع "القياسية". وتُعيد الدليل الذي "رُبط" به النطاق.

    النطاق المبدئي هو قيمة TEXTDOMAIN. إذا كان الدليل سلسلة فارغة ("")، فإن bindtextdomain() تعيد الربط الحالي لـ النطاق المعطى.

dcgettext(السلسلة [, النطاق [, الفئة]])
    تُعيد ترجمة السلسلة في نطاق النص النطاق لفئة المحلية الفئة. القيمة المبدئية لـ النطاق هي القيمة الحالية لـ TEXTDOMAIN. والقيمة المبدئية لـ الفئة هي "LC_MESSAGES".

dcngettext(سلسلة1, سلسلة2, العدد [, النطاق [, الفئة]])
    تُعيد صيغة الجمع المستخدمة لـ العدد من ترجمة سلسلة1 و سلسلة2 في نطاق النص النطاق لفئة المحلية الفئة. القيمة المبدئية لـ النطاق هي القيمة الحالية لـ TEXTDOMAIN. والقيمة المبدئية لـ الفئة هي "LC_MESSAGES".

  الدوال ذات القيم المنطقية
يمكنك إنشاء قيم خاصة من النوع المنطقي (Boolean)؛ انظر الدليل لمعرفة كيف تعمل ولماذا هي موجودة.

mkbool(تعبير)
    بناءً على القيمة المنطقية لـ تعبير، تُعيد إما قيمة صواب أو قيمة خطأ. قيم الصواب لها القيمة العددية واحد، وقيم الخطأ لها القيمة العددية صفر.

دوال معرفة من قبل المستخدم
تُعرف الدوال في AWK كما يلي:

    function الاسم(قائمة المعاملات) { العبارات }

تُنَفَّذ الدوال عند استدعائها من داخل تعبيرات في الأنماط أو الإجراءات. تُستخدم المعاملات الفعلية المزودة في استدعاء الدالة لتمثيل المعاملات الرسمية المعلنة في الدالة. تُمرر المصفوفات بالمرجع، بينما تُمرر المتغيرات الأخرى بالقيمة.

تُعلن المتغيرات المحلية كمعاملات إضافية في قائمة المعاملات. جرى العرف على فصل المتغيرات المحلية عن المعاملات الحقيقية بمسافات إضافية في قائمة المعاملات. على سبيل المثال:

    function  f(p, q,     a, b)	# a و b محليان { 	... }
    /abc/	{ ... ; f(1, 2) ; ... }

يجب أن تتبع القوس اليسرى في استدعاء الدالة اسم الدالة مباشرة، دون أي مسافات بيضاء فاصلة. لا ينطبق هذا القيد على الدوال المدمجة المذكورة أعلاه.

قد تستدعي الدوال بعضها البعض وقد تكون عاودية (recursive). تُهَيَّأ معاملات الدوال المستخدمة كمتغيرات محلية إلى سلسلة فارغة والعدد صفر عند استدعاء الدالة.

استخدم return تعبير لإعادة قيمة من الدالة. تكون القيمة المعادة غير محددة إذا لم تُزود قيمة، أو إذا انتهت الدالة بالوصول إلى نهايتها.

يمكن استدعاء الدوال بشكل غير مباشر. للقيام بذلك، عين اسم الدالة المراد استدعاؤها، كسلسلة نصية، لمتغير. ثم استخدم المتغير كما لو كان اسم دالة، مسبوقًا بعلامة @، كما يلي:
    function myfunc() { 	print "استدعيت myfunc" 	... }
    {	... 	the_func = "myfunc" 	@the_func()	# استدعاء myfunc عبر the_func 	... }

إذا زُوِّد الخيار --lint، فسيحذر gawk من استدعاءات الدوال غير المعرفة في وقت التحليل، بدلاً من وقت التشغيل. استدعاء دالة غير معرفة في وقت التشغيل هو خطأ فادح.

تحميل دوال جديدة ديناميكيًا
يمكنك إضافة دوال جديدة مكتوبة بلغة C أو ++C ديناميكيًا إلى مترجم gawk قيد التشغيل باستخدام عبارة @load. التفاصيل الكاملة خارج نطاق صفحة الدليل هذه؛ انظر https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.

إشارات
يقبل مِدقاق gawk إشارتين. تؤدي SIGUSR1 إلى تفريغ تشكيلة وكومة استدعاء الدوال إلى ملف التشكيلة، وهو إما awkprof.out، أو أي ملف سُمي باستخدام خيار --profile. ثم يستمر في العمل. وتؤدي SIGHUP إلى قيام gawk بتفريغ التشكيلة وكومة استدعاء الدوال ثم الخروج.

التدويل
ثوابت السلاسل النصية هي تسلسلات من المحارف المحاطة بعلامات اقتباس مزدوجة. في البيئات غير الناطقة بالإنجليزية، يمكن تمييز السلاسل في برنامج AWK على أنها تتطلب ترجمة إلى اللغة الطبيعية المحلية. تُميز هذه السلاسل في برنامج AWK بشرطة سفلية بادئة ("_"). على سبيل المثال،

    gawk 'BEGIN { print "hello, world" }'

تطبع دائماً hello, world. لكن،

    gawk 'BEGIN { print _"hello, world" }'

قد تطبع bonjour, monde في فرنسا. انظر https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization للتعرف على الخطوات المتبعة لإنتاج وتشغيل برنامج AWK قابل للتوطين.

امتدادات GNU
يحتوي Gawk على عدد كبير جدًا من الامتدادات لـ POSIX awk. وهي موصوفة في https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. يمكن تعطيل جميع الامتدادات عن طريق استدعاء gawk مع الخيارات --traditional أو --posix.

متغيرات البيئة
يمكن استخدام متغير البيئة AWKPATH لتوفير قائمة بالأدلة التي يبحث فيها gawk عن الملفات المسماة عبر خيارات -f و --file و -i و --include، وتوجيهات @include و @nsinclude. إذا فشل البحث الأولي، يُبحث في المسار مرة أخرى بعد إضافة .awk إلى اسم الملف.

يمكن استخدام متغير البيئة AWKLIBPATH لتوفير قائمة بالأدلة التي يبحث فيها gawk عن الملفات المسماة عبر خيارات -l و --load.

يحدد متغير البيئة GAWK_PERSIST_FILE، في حال وجوده، ملفًا لاستخدامه كمخزن خلفي للذاكرة المستمرة. انظر GAWK: برمجة AWK الفعالة للحصول على التفاصيل.

يمكن استخدام متغير البيئة GAWK_READ_TIMEOUT لتحديد مهلة بالملي ثانية لقراءة المدخلات من طرفية أو أنبوب أو اتصال ثنائي الاتجاه بما في ذلك المقابس.

للاتصال بمضيف بعيد عبر مقبس، يتحكم GAWK_SOCK_RETRIES في عدد محاولات إعادة الاتصال، و GAWK_MSEC_SLEEP في الفاصل الزمني بين المحاولات. الفاصل الزمني بالملي ثانية. في الأنظمة التي لا تدعم usleep(3)، تُقَرَّب القيمة إلى أقرب عدد صحيح من الثواني.

إذا وُجد POSIXLY_CORRECT في البيئة، فسيقوم gawk بالتصرف تمامًا كما لو حُدِّد --posix على سطر الأوامر. إذا حُدِّد --lint، فسيصدر gawk رسالة تحذير بهذا الشأن.

حالة الخروج
إذا استُخدمت عبارة exit مع قيمة، فإن gawk يخرج بالقيمة العددية المعطاة له.

خلاف ذلك، إذا لم تكن هناك مشاكل أثناء التنفيذ، يخرج gawk بالقيمة الثابتة C لـ EXIT_SUCCESS. عادة ما تكون هذه القيمة صفرًا.

إذا حدث خطأ، يخرج gawk بالقيمة الثابتة C لـ EXIT_FAILURE. عادة ما تكون هذه القيمة واحدًا.

إذا خرج gawk بسبب خطأ فادح، تكون حالة الخروج 2. في الأنظمة غير المتوافقة مع POSIX، قد تُعين هذه القيمة إلى EXIT_FAILURE.

معلومات الإصدار
توثق صفحة الدليل هذه gawk، الإصدار 5.4.

المؤلفون
صُممت ونُفذت النسخة الأصلية من UNIX awk بواسطة Alfred Aho، و Peter Weinberger، و Brian Kernighan من مختبرات Bell. المداوم الحالي هو Ozan Yigit. يشارك Brian Kernighan أحياناً في تطويره.

كتب Paul Rubin و Jay Fenlason، من مؤسسة البرمجيات الحرة، gawk، ليكون متوافقاً مع النسخة الأصلية من awk الموزعة في الإصدار السابع من UNIX. ساهم John Woods بعدد من إصلاحات العلل. David Trueman، بمساهمات من Arnold Robbins، جعل gawk متوافقاً مع النسخة الجديدة من UNIX awk. المداوم الحالي هو Arnold Robbins.

انظر GAWK: برمجة AWK الفعالة للحصول على قائمة كاملة بالمساهمين في gawk وتوثيقه.

انظر ملف README في توزيعة gawk للحصول على معلومات محدثة عن المداومين والمنافذ المدعومة حالياً.

تقارير العلل والأسئلة
إذا وجدت علة في gawk، فيرجى استخدام برنامج gawkbug(1) للإبلاغ عنها.

تتوفر تعليمات كاملة للإبلاغ عن علة في https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. يرجى قراءة واتباع التعليمات المعطاة هناك بعناية. سيجعل هذا الإبلاغ عن العلل وحلها أسهل بكثير لكل المعنيين. حقًا.

من ناحية أخرى، إذا كان لديك سؤال حول كيفية إنجاز مهمة معينة باستخدام awk أو gawk، فأرسل بريداً إلكترونياً إلى help-gawk@gnu.org مع طلبك للمساعدة.

العلل
خيار -F ليس ضرورياً بالنظر إلى ميزة تعيين المتغيرات من سطر الأوامر؛ وقد بقي فقط للتوافق مع الإصدارات السابقة.

صفحة الدليل هذه طويلة جداً؛ gawk يحتوي على ميزات كثيرة جداً.

انظر أيضًا
egrep(1)، و sed(1)، و gawkbug(1)، و printf(3)، و strftime(3).

لغة البرمجة AWK، الطبعة الثانية، Alfred V. Aho، و Brian W. Kernighan، و Peter J. Weinberger، منشورات Addison-Wesley، 2023. رقم 9-780138-269722 ISBN.

GAWK: برمجة AWK الفعالة، الإصدار 5.3، المرفق مع مصدر gawk. النسخة الحالية من هذا المستند متاحة على الإنترنت في https://www.gnu.org/software/gawk/manual.

توثيق GNU gettext، المتاح على الإنترنت في https://www.gnu.org/software/gettext.

أمثلة
اطبع أسماء الدخول لجميع المستخدمين وفرزها:
	BEGIN	{ FS = ":" } 		{ print $1 | "sort" }
عد الأسطر في ملف:
		{ nlines++ } 	END	{ print nlines }
ألحِق بكل سطر رقمه في الملف:
	{ print FNR, $0 }
سلسل ورقّم الأسطر (تنويع على ذات الفكرة):
	{ print NR, $0 }
شغّل أمراً خارجياً لأسطر بيانات معينة:
	tail -f access_log | 	awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'

أذونات النسخ
حقوق النشر © 1989، 1991، 1992، 1993، 1994، 1995، 1996، 1997، 1998، 1999، 2001، 2002، 2003، 2004، 2005، 2007، 2009، 2010، 2011، 2012، 2013، 2014، 2015، 2016، 2017، 2018، 2019، 2020، 2021، 2022، 2023، 2024، 2025، 2026 مؤسسة البرمجيات الحرة (Free Software Foundation, Inc.)

مُنح الإذن بصنع وتوزيع نسخ حرفية من صفحة الدليل هذه بشرط الحفاظ على إشعار حقوق النشر وإشعار الإذن هذا في جميع النسخ.

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

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

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.