.\" -*- coding: UTF-8 -*- .ds PX \s-1POSIX\s+1 .ds UX \s-1UNIX\s+1 .ds GN \s-1GNU\s+1 .ds AK \s-1AWK\s+1 .ds EP \fIGAWK: برمجة AWK الفعالة\fP .if !\w@\*(lq@ \{\ .\" The implementation doesn't seem to support the strings `lq` or `rq`. . ie \n(.g \{\ . ds lq \(lq\" . ds rq \(rq\" . \} . el \{\ . ds lq `` . ds rq '' . \} .\} .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GAWK 1 "10 فبراير 2026" "مؤسسة البرمجيات الحرة" "أوامر أدوات المساعدة" .SH الاسم gawk \- لغة فحص الأنماط ومعالجتها .SH موجز \fBgawk\fP [ خيارات بنمط \*(PX أو \*(GN ] \fB\-f\fP \fIملف\-البرنامج\fP [ \fB\-\^\-\fP ] ملف \&.\|.\|. .br \fBgawk\fP [ خيارات بنمط \*(PX أو \*(GN ] [ \fB\-\^\-\fP ] \fIنص\-البرنامج\fP ملف \&.\|.\|. .SH "اقرأني أولًا" وُفرت صفحة الدليل هذه \fIكمجاملة\fP. يرجى ملاحظة أن المصدر الوحيد للحقيقة لبرنامج \fIgawk\fP هو دليل Texinfo، المتاح عبر الإنترنت بتنسيقات عديدة في \fIhttps://www.gnu.org/software/gawk/manual\fP. قد يكون مثبتًا أيضًا في نظام Info الفرعي على حاسوبك، وبالتالي متاحًا عبر الأمر \fIinfo\fP(1). .PP في حال وجود أي تعارض بين دليل Texinfo وصفحة الدليل هذه، يجب اعتبار دليل Texinfo هو المرجع المعتمد. .PP لاحظ أن وثائق Info، وصفحات الويب HTML، ونسخة PDF من الدليل تحتوي جميعها على المحتوى ذاته، حيث وُلدت جميعها من ملف مصدر Texinfo نفسه. .PP علاوة على ذلك، يحتفظ وصي \fIgawk\fP بالحق في المستقبل في إزالة صفحة الدليل هذه من التوزيعة أو اختصار المحتوى بشكل كبير لتخفيف عبء الصيانة عليه. .SH الوصف \fIGawk\fP هو تطبيق مشروع \*(GN للغة البرمجة \*(AK. وهو يتوافق مع تعريف اللغة في معيار \*(PX 1003.1. تعتمد هذه النسخة بدورها على الوصف الوارد في كتاب \fIلغة البرمجة AWK\fP، بواسطة Aho وKernighan وWeinberger. يوفر \fIGawk\fP الميزات الإضافية الموجودة في النسخة الحالية من \fIawk\fP الخاص ببرايان كيرنيغان والعديد من الامتدادات الخاصة بـ \*(GN. .PP يتكون سطر الأوامر من خيارات لبرنامج \fIgawk\fP نفسه، ونص برنامج \*(AK (إذا لم يُوفر عبر الخيارين \fB\-f\fP أو \fB\-\^\-include\fP)، والقيم التي ستُتاح في متغيرات \*(AK المحددة مسبقًا \fBARGC\fP و\fBARGV\fP. .SH تصدير صُممت صفحة الدليل هذه لتكون موجزة قدر الإمكان. تُوفر التفاصيل الكاملة في \*(EP، ويجب عليك البحث هناك عن القصة الكاملة لأي ميزة محددة. وُفرت روابط للنسخة المتاحة عبر الإنترنت من الدليل حيثما أمكن ذلك. .SH "تنسيق الخيارات" قد تكون خيارات \fIGawk\fP إما خيارات تقليدية من حرف واحد بنمط \*(PX، أو خيارات طويلة بنمط \*(GN. تبدأ خيارات \*(PX بشرطة مفردة \*(lq\-\*(rq، بينما تبدأ الخيارات الطويلة بشرطتين \*(lq\-\^\-\*(rq. تُوفر الخيارات الطويلة لكل من الميزات الخاصة بـ \*(GN والميزات المفروضة من \*(PX. .PP تُستخدم الخيارات الخاصة بـ \fIGawk\fP عادةً في شكل الخيارات الطويلة. تُربط معاملات الخيارات الطويلة بالخيار إما بعلامة \fB=\fP، بدون مسافات فاصلة، أو قد تُوفر في المعامل التالي في سطر الأوامر. يمكن اختصار الخيارات الطويلة، طالما ظل الاختصار فريدًا. .PP بالإضافة إلى ذلك، لكل خيار طويل خيار قصير مقابل، بحيث يمكن استخدام وظائف الخيار من داخل سكربتات \fB#!\&\fP القابلة للتنفيذ. .SH الخيارات يقبل \fIGawk\fP الخيارات التالية. تُدرج الخيارات القياسية أولًا، تليها خيارات امتدادات \fIgawk\fP، مرتبة أبجديًا حسب الخيار القصير. .TP \fB\-f\fP\fI ملف\-البرنامج\fP،\fI \fP\fB\-\^\-file\fP\fI ملف\-البرنامج\fP اقرأ مصدر برنامج \*(AK من الملف \fIملف\-البرنامج\fP، بدلًا من المعامل الأول في سطر الأوامر. يمكن استخدام خيارات \fB\-f\fP متعددة. تُعامل الملفات المقروءة باستخدام \fB\-f\fP كما لو كانت تبدأ بعبارة \fB@namespace "awk"\fP ضمنية. .TP \fB\-F\fP\fI fs\fP، \fB\-\^\-field\-separator\fP\fI fs\fP استخدم \fIfs\fP لفاصل حقول الإدخال (قيمة المتغير المحدد مسبقًا \fBFS\fP). .TP \fB\-v\fP\fI var\fP\fB\^=\^\fP\fIval\fP، \fB\-\^\-assign \fP\fIvar\fP\fB\^=\^\fP\fIval\fP أسند القيمة \fIval\fP إلى المتغير \fIvar\fP، قبل بدء تنفيذ البرنامج. تكون قيم هذه المتغيرات متاحة لقاعدة \fBBEGIN\fP في برنامج \*(AK. .TP \fB\-b\fP، \fB\-\^\-characters\-as\-bytes\fP عامل جميع بيانات الإدخال كأحرف وحيدة البايت. يتجاوز الخيار \fB\-\^\-posix\fP هذا الخيار. .TP \fB\-c\fP، \fB\-\^\-traditional\fP شغل في وضع \fIالتوافق\fP. في وضع التوافق، يتصرف \fIgawk\fP بشكل مطابق لبرنامج \fIawk\fP الخاص ببرايان كيرنيغان؛ ولا يُتعرف على أي من امتدادات \*(GN الخاصة. .TP \fB\-C\fP، \fB\-\^\-copyright\fP اطبع النسخة القصيرة من رسالة معلومات حقوق النسخ لـ \*(GN على المخرج القياسي واخرج بنجاح. .TP \fB\-d\fP[\fIملف\fP]، \fB\-\^\-dump\-variables\fP[\fB=\fP\fIملف\fP] اطبع قائمة مرتبة بالمتغيرات العامة وأنواعها وقيمها النهائية إلى \fIملف\fP. الملف المبدئي هو \fBawkvars.out\fP في الدليل الحالي. .TP \fB\-D\fP[\fIملف\fP]، \fB\-\^\-debug\fP[\fB=\fP\fIملف\fP] مكّن تنقِيح برامج \*(AK. يقرأ المنقح الأوامر مبدئيًا بشكل تفاعلي من لوحة المفاتيح (المدخل القياسي). يحدد معامل \fIالملف\fP الاختياري ملفًا يحتوي على قائمة أوامر لينفذها المنقح بشكل غير تفاعلي. .sp .5 في هذا الوضع من التنفيذ، يحمل \fIgawk\fP كود مصدر AWK ثم يطلب أوامر التنقيح. يمكن لـ \fIGawk\fP فقط تنقيح مصدر برنامج AWK الموفر عبر خياري \fB\-f\fP و\fB\-\^\-include\fP. المنقح موثق في \*(EP؛ انظر \fIhttps://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger\fP. .TP \fB\-e\fP\fI نص\-البرنامج\fP، \fB\-\^\-source\fP\fI نص\-البرنامج\fP استخدم \fIنص\-البرنامج\fP ككود مصدر لبرنامج \*(AK. تُعامل كل معامل يُوفر عبر \fB\-e\fP كما لو كان يبدأ بعبارة \fB@namespace "awk"\fP ضمنية. .TP \fB\-E \fP\fIملف\fP، \fB\-\^\-exec \fP\fIملف\fP مشابه لـ \fB\-f\fP، ومع ذلك، فإن هذا الخيار هو آخر خيار يُعالج. يجب استخدامه مع سكربتات \fB#!\&\fP، خاصة لتطبيقات CGI، لتجنب تمرير الخيارات أو كود المصدر (!\&) في سطر الأوامر من عنوان URL. يعطل هذا الخيار إسنادات المتغيرات في سطر الأوامر. .TP \fB\-g\fP، \fB\-\^\-gen\-pot\fP افحص وحلل برنامج \*(AK، وولد ملفًا بتنسيق \*(GN \fB\&.pot\fP (قالب كائن محمول) على المخرج القياسي مع مدخلات لجميع السلاسل القابلة للترجمة في البرنامج. لا يُنفذ البرنامج نفسه. .TP \fB\-h\fP، \fB\-\^\-help\fP اطبع ملخصًا قصيرًا نسبيًا للخيارات المتاحة على المخرج القياسي. وفقًا لـ \fIمعايير ترميز GNU\fP، تسبب هذه الخيارات خروجًا فوريًا وناجحًا. .TP \fB\-i \fP\fIملف\-تضمين\fP، \fB\-\^\-include \fP\fIملف\-تضمين\fP حمل مكتبة مصدر awk. يبحث هذا عن المكتبة باستخدام متغير البيئة \fBAWKPATH\fP. إذا فشل البحث الأولي، ستُجرى محاولة أخرى بعد إلحاق اللاحقة \fB\&.awk\fP. سيُحمل الملف مرة واحدة فقط (أي تُحذف التكرارات)، ولا يشكل الكود مصدر البرنامج الرئيس. تُعامل الملفات المقروءة باستخدام \fB\-\^\-include\fP كما لو كانت تبدأ بعبارة \fB@namespace "awk"\fP ضمنية. .TP \fB\-I\fP، \fB\-\^\-trace\fP اطبع أسماء أكواد البايت الداخلية أثناء تنفيذها عند تشغيل البرنامج. يُطبع التتبع على الخطأ القياسي. يسبق كل \*(lqكود عملية\*(rq علامة \fB+\fP في المخرج. .TP \fB\-k\fP، \fB\-\^\-csv\fP مكّن المعالجة الخاصة لـ CSV. انظر \fBالقيم المفصولة بفواصل\fP أدناه لمزيد من التفاصيل. .TP \fB\-l\fP\fI lib\fP، \fB\-\^\-load\fP\fI lib\fP حمل امتداد \fIgawk\fP من المكتبة المشتركة \fIlib\fP. يبحث هذا عن المكتبة باستخدام متغير البيئة \fBAWKLIBPATH\fP. إذا فشل البحث الأولي، ستُجرى محاولة أخرى بعد إلحاق لاحقة المكتبة المشتركة المبدئية للمنصة. يُتوقع أن يكون اسم روتين تهيئة المكتبة \fBdl_load()\fP. .TP \fB\-L \fP[\fIقيمة\fP]، \fB\-\^\-lint\fP[\fB=\fP\fIقيمة\fP] قدم تحذيرات حول البنى المشبوهة أو غير القابلة للنقل إلى تطبيقات \*(AK الأخرى. انظر \fIhttps://www.gnu.org/software/gawk/manual/html_node/Options.html#Options\fP للحصول على قائمة بالقيم الممكنة لـ \fIالقيمة\fP. .TP \fB\-M\fP، \fB\-\^\-bignum\fP افرض الحساب التعسفي الدقة على الأرقام. ليس لهذا الخيار أي تأثير إذا لم يُصرف \fIgawk\fP لاستخدام مكتبي GNU MPFR وGMP. (في هذه الحالة، يصدر \fIgawk\fP تحذيرًا). .sp \fBملاحظة:\fP هذه الميزة \fIتحت المراقبة\fP. لم يعد وصي \fIgawk\fP الرئيس يدعمها، على الرغم من وجود عضو في فريق التطوير يدعمها. إذا تغير هذا الوضع، فستُزال الميزة من \fIgawk\fP. .ig Set \fBGAWK_NO_MPFR_WARN\fR in the environment to silence the warning. .. .TP \fB\-n\fP، \fB\-\^\-non\-decimal\-data\fP تعرف على القيم الثمانية والست عشرية في بيانات الإدخال. \fIاستخدم هذا الخيار بحذر شديد!\fP .TP \fB\-N\fP، \fB\-\^\-use\-lc\-numeric\fP افرض على \fIgawk\fP استخدام حرف الفاصلة العشرية الخاص باللغة المحلية عند تحليل بيانات الإدخال. .TP \fB\-o\fP[\fIملف\fP]، \fB\-\^\-pretty\-print\fP[\fB=\fP\fIملف\fP] أخرج نسخة منسقة بجمالية من البرنامج إلى \fIملف\fP. الملف المبدئي هو \fBawkprof.out\fP في الدليل الحالي. يتضمن هذا الخيار \fB\-\^\-no\-optimize\fP. .TP \fB\-O\fP، \fB\-\^\-optimize\fP مكّن تحسينات \fIgawk\fP المبدئية على التمثيل الداخلي للبرنامج. هذا الخيار مفعل مبدئيًا. .TP \fB\-p\fP[\fIملف\-التشكيلة\fP]، \fB\-\^\-profile\fP[\fB=\fP\fIملف\-التشكيلة\fP] ابدأ جلسة تشكيل، وأرسل بيانات التشكيلة إلى \fIملف\-التشكيلة\fP. المبدئي هو \fBawkprof.out\fP في الدليل الحالي. تحتوي التشكيلة على أعداد تنفيذ كل عبارة في البرنامج في الهامش الأيسر وأعداد استدعاءات الدوال لكل دالة يعرفها المستخدم. يعمل \fIGawk\fP ببطء أكبر في هذا الوضع. يتضمن هذا الخيار \fB\-\^\-no\-optimize\fP. .TP \fB\-P\fP، \fB\-\^\-posix\fP يفعل هذا وضع \fIالتوافق\fP، ويعطل عددًا من الامتدادات الشائعة. .TP \fB\-r\fP، \fB\-\^\-re\-interval\fP مكّن استخدام \fIتعبيرات الفترات\fP في مطابقة التعبيرات النمطية. تُمكن تعبيرات الفترات مبدئيًا، ولكن يظل هذا الخيار موجودًا للتوافق مع الإصدارات السابقة. .TP \fB\-s\fP، \fB\-\^\-no\-optimize\fP عطل تحسينات \fIgawk\fP المبدئية على التمثيل الداخلي للبرنامج. .TP \fB\-S\fP، \fB\-\^\-sandbox\fP شغل \fIgawk\fP في وضع المعزل (sandbox)، مع تعطيل دالة \fBsystem()\fP، وإعادة توجيه الإدخال باستخدام \fBgetline\fP، وإعادة توجيه الإخراج باستخدام \fBprint\fP و\fBprintf\fP، وتحميل الامتدادات الديناميكية. يُعطل أيضًا تنفيذ الأوامر (عبر الأنابيب). .TP \fB\-t\fP، \fB\-\^\-lint\-old\fP قدم تحذيرات حول البنى غير القابلة للنقل إلى النسخة الأصلية من \fIawk\fP لنظام \*(UX. .TP \fB\-V\fP، \fB\-\^\-الإصدارة\fP اطبع معلومات الإصدارة لهذه النسخة المحددة من \fIgawk\fP على المخرج القياسي. هذا مفيد عند الإبلاغ عن العلل. وفقًا لـ \fIمعايير ترميز GNU\fP، تسبب هذه الخيارات خروجًا فوريًا وناجحًا. .TP \fB\-\^\-\fP أشر إلى نهاية الخيارات. هذا مفيد للسماح للمعاملات الإضافية لبرنامج \*(AK نفسه بالبدء بـ \*(lq\-\*(rq. .PP في وضع التوافق، تُوسم أي خيارات أخرى على أنها غير صالحة، ولكن يتم تجاهلها بخلاف ذلك. في التشغيل العادي، طالما وُفر نص البرنامج، تُمرر الخيارات غير المعروفة إلى برنامج \*(AK في مصفوفة \fBARGV\fP للمعالجة. .PP للتوافق مع \*(PX، يمكن استخدام الخيار \fB\-W\fP متبوعًا باسم خيار طويل. .SH "تنفيذ برنامج AWK" يتكون برنامج \*(AK من تسلسل من التوجيهات الاختيارية، وعبارات النمط\-الإجراء، وتعاريف الدوال الاختيارية. .RS .PP \fB@include "\fP\fIاسم\-الملف\^\fP\fB"\fP .br \fB@nsinclude "\fP\fIاسم\-الملف\^\fP\fB"\fP .br \fB@load "\fP\fIاسم\-الملف\^\fP\fB"\fP .br \fB@namespace "\fP\fIالاسم\^\fP\fB"\fP .br \fIالنمط\fP\fB { \fP\fIجمل الإجراء\fP\fB }\fP .br \fBfunction \fP\fIالاسم\fP\fB(\fP\fIقائمة المعاملات\fP\fB) { \fP\fIالجمل\fP\fB }\fP .RE .PP يقرأ \fIGawk\fP أولًا مصدر البرنامج من \fIملفات\-البرنامج\fP إذا حُددت، أو من معاملات الخيار \fB\-\^\-source\fP، أو من أول معامل ليس خيارًا في سطر الأوامر. يمكن استخدام الخيارين \fB\-f\fP و \fB\-\^\-source\fP مرات متعددة في سطر الأوامر. يقرأ \fIGawk\fP نص البرنامج كما لو كانت كل \fIملفات\-البرنامج\fP ونصوص المصدر من سطر الأوامر قد دُمجت معًا. .PP بالإضافة إلى ذلك، يمكن استخدام الأسطر التي تبدأ بـ \fB@include\fP لتضمين ملفات مصدر أخرى في برنامجك. هذا يعادل استخدام الخيار \fB\-\^\-include\fP. .PP تُضمن الأسطر التي تبدأ بـ \fB@nsinclude\fP الملفات أيضًا، ولكن مع فارقين. الأول، أن فضاء الأسماء في الملف المُضمن \fIلا\fP يُعاد ضبطه إلى المبدئي وهو \fBawk\fP، ويمكن تضمين مثل هذه الملفات عدة مرات. .PP يمكن استخدام الأسطر التي تبدأ بـ \fB@load\fP لتحميل وظائف الامتداد في برنامجك. هذا يعادل استخدام الخيار \fB\-\^\-load\fP. .PP يحدد متغير البيئة \fBAWKPATH\fP مسار بحث لاستخدامه عند العثور على ملفات المصدر المسماة بالخيارين \fB\-f\fP و \fB\-\^\-include\fP. إذا لم يكن هذا المتغير موجودًا، فإن المسار المبدئي هو \fB".:/usr/local/share/awk"\fP. (قد يختلف الدليل الفعلي اعتمادًا على كيفية بناء وتثبيت \fIgawk\fP.) إذا كان اسم الملف المعطى للخيار \fB\-f\fP يحتوي على محرف "/"، فلا يُجرى بحث في المسارات. .PP يحدد متغير البيئة \fBAWKLIBPATH\fP مسار بحث لاستخدامه عند العثور على ملفات المصدر المسماة بالخيار \fB\-\^\-load\fP. إذا لم يكن هذا المتغير موجودًا، فإن المسار المبدئي هو \fB"/usr/local/lib/gawk"\fP. (قد يختلف الدليل الفعلي اعتمادًا على كيفية بناء وتثبيت \fIgawk\fP.) .PP ينفذ \fIGawk\fP برامج \*(AK بالترتيب التالي. أولًا، تُنفذ جميع تعيينات المتغيرات المحددة عبر الخيار \fB\-v\fP. بعد ذلك، يصرف \fIgawk\fP البرنامج إلى شكل داخلي. ثم ينفذ \fIgawk\fP الشيفرة في قاعدة (قواعد) \fBBEGIN\fP (إن وجدت)، ثم ينتقل لقراءة كل ملف مسمى في مصفوفة \fBARGV\fP (حتى \fBARGV[ARGC\-1]\fP). إذا لم توجد ملفات مسماة في سطر الأوامر، يقرأ \fIgawk\fP الدخل القياسي. .PP إذا كان لاسم ملف في سطر الأوامر الصيغة \fIvar\fP\fB=\fP\fIval\fP فإنه يُعامل كتعيين متغير. سيُعين للمتغير \fIvar\fP القيمة \fIval\fP. (يحدث هذا بعد تشغيل أي قاعدة (قواعد) \fBBEGIN\fP.) .PP إذا كانت قيمة عنصر معين في \fBARGV\fP فارغة (\fB""\fP)، يتخطاها \fIgawk\fP. .PP لكل ملف دخل، إذا وجدت قاعدة \fBBEGINFILE\fP، ينفذ \fIgawk\fP الشيفرة المرتبطة بها قبل معالجة محتويات الملف. وبالمثل، ينفذ \fIgawk\fP الشيفرة المرتبطة بقواعد \fBENDFILE\fP بعد معالجة الملف. .PP لكل سجل في الدخل، يختبر \fIgawk\fP ما إذا كان يطابق أي \fIنمط\fP في برنامج \*(AK. ولكل نمط يطابقه السجل، ينفذ \fIgawk\fP \fIالإجراء\fP المرتبط به. تُختبر الأنماط بالترتيب الذي وردت به في البرنامج. .PP أخيرًا، بعد استهلاك كل الدخل، ينفذ \fIgawk\fP الشيفرة في قاعدة (قواعد) \fBEND\fP (إن وجدت). .SS "أدلة سطر الأوامر" وفقًا لمعيار POSIX، يجب أن تكون الملفات المسماة في سطر أوامر \fIawk\fP ملفات نصية. السلوك يكون "غير محدد" إذا لم تكن كذلك. تعامل معظم إصدارات \fIawk\fP وجود دليل في سطر الأوامر كخطأ فادح. .PP بالنسبة لـ \fIgawk\fP، ينتج عن وجود دليل في سطر الأوامر تحذير، ولكن يتم تخطيه بخلاف ذلك. إذا أُعطي أي من الخيارين \fB\-\^\-posix\fP أو \fB\-\^\-traditional\fP، فإن \fIgawk\fP يعود لمعاملة الأدلة في سطر الأوامر كخطأ فادح. .SH "المتغيرات، السجلات والحقول" متغيرات \*(AK ديناميكية؛ فهي توجد عند أول استخدام لها. قيمها إما أرقام بفاصلة عائمة أو سلاسل نصية، أو كلاهما، اعتمادًا على كيفية استخدامها. بالإضافة إلى ذلك، يسمح \fIgawk\fP للمتغيرات بأن تكون من نوع التعبير النمطي. يحتوي \*(AK أيضًا على مصفوفات أحادية البعد؛ ويمكن محاكاة المصفوفات متعددة الأبعاد. ومع ذلك، يوفر \fIgawk\fP مصفوفات حقيقية من المصفوفات. تُضبط عدة متغيرات معرفة مسبقًا أثناء تشغيل البرنامج؛ وتوصف هذه حسب الحاجة وتُلخص أدناه. .SS السجلات عادةً ما تُفصل السجلات بمحارف سطر جديد. يمكنك التحكم في كيفية فصل السجلات عن طريق تعيين قيم للمتغير المدمج \fBRS\fP. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Records.html\fP للمزيد من التفاصيل. .SS الحقول عند قراءة كل سجل دخل، يقسم \fIgawk\fP السجل إلى \fIحقول\fP، باستخدام قيمة المتغير \fBFS\fP كفاصل للحقول. بالإضافة إلى ذلك، يمكن استخدام \fBFIELDWIDTHS\fP و \fBFPAT\fP للتحكم في تقسيم حقول الدخل. راجع التفاصيل، بدءًا من \fIhttps://www.gnu.org/software/gawk/manual/html_node/Fields.html\fP. .PP يمكن الإشارة إلى كل حقل في سجل الدخل من خلال موضعه: \fB$1\fP، و \fB$2\fP، وهكذا. \fB$0\fP هو السجل بأكمله، بما في ذلك المساحات البيضاء البادئة واللاحقة. .PP يُضبط المتغير \fBNF\fP على العدد الإجمالي للحقول في سجل الدخل. .PP تنتج الإشارات إلى حقول غير موجودة (أي الحقول بعد \fB$NF\fP) السلسلة الصفرية (null). ومع ذلك، فإن التعيين لحقل غير موجود (مثلاً \fB$(NF+2) = 5\fP) يزيد من قيمة \fBNF\fP، وينشئ أي حقول متدخلة بقيمة السلسلة الصفرية، ويؤدي إلى إعادة حساب قيمة \fB$0\fP، مع فصل الحقول بقيمة \fBOFS\fP. تسبب الإشارات إلى حقول مرقمة بالسالب خطأً فادحًا. يؤدي تقليل \fBNF\fP إلى فقدان قيم الحقول التي تتجاوز القيمة الجديدة، وإعادة حساب قيمة \fB$0\fP، مع فصل الحقول بقيمة \fBOFS\fP. .PP يؤدي تعيين قيمة لحقل موجود إلى إعادة بناء السجل بالكامل عند الإشارة إلى \fB$0\fP. وبالمثل، يؤدي تعيين قيمة لـ \fB$0\fP إلى إعادة تقسيم السجل، مما يؤدي إلى إنشاء قيم جديدة للحقول. .SS "قيم مفصولة بفواصل (CSV)" عند استدعائه باستخدام الخيار \fB\-k\fP أو \fB\-\^\-csv\fP، لا يستخدم \fIgawk\fP تحديد السجلات المنتظم وتقسيم الحقول كما هو موضح أعلاه. بدلًا من ذلك، تُنهى السجلات بأسطر جديدة غير مقتبسة، وتُفصل الحقول بفاصلات. يمكن استخدام علامات الاقتباس المزدوجة لإحاطة الحقول التي تحتوي على فواصل، أو أسطر جديدة، أو علامات اقتباس مزدوجة مضاعفة. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Comma\-Separated\-Fields.html\fP لمزيد من التفاصيل. .SS "المتغيرات المدمجة" متغيرات \fIGawk\^\fP المدمجة مدرجة أدناه. هذه القائمة موجزة عمدًا. للتفاصيل، راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Built_002din\-Variables\fP. .TP "\w'\fBFIELDWIDTHS\fR'u+1n" \fBARGC\fP عدد معاملات سطر الأوامر. .TP \fBARGIND\fP الفهرس في \fBARGV\fP للملف الحالي الذي تتم معالجته. .TP \fBARGV\fP مصفوفة معاملات سطر الأوامر. المصفوفة مفهرسة من 0 إلى \fBARGC\fP \- 1. .TP \fBBINMODE\fP في الأنظمة غير المتوافقة مع POSIX، يحدد استخدام الوضع "الثنائي" لجميع عمليات الإدخال والإخراج للملفات. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/PC\-Using.html\fP للمزيد من التفاصيل. .TP \fBCONVFMT\fP تنسيق التحويل للأرقام، \fB"%.6g"\fP مبدئيًا. .TP \fBENVIRON\fP مصفوفة تحتوي على قيم البيئة الحالية. المصفوفة مفهرسة بواسطة متغيرات البيئة، وكل عنصر هو قيمة ذلك المتغير. .TP \fBERRNO\fP إذا حدث خطأ في النظام سواء أثناء إجراء إعادة توجيه لـ \fBgetline\fP، أو أثناء القراءة لـ \fBgetline\fP، أو أثناء \fBclose()\fP، فسيُضبط \fBERRNO\fP على سلسلة نصية تصف الخطأ. القيمة قابلة للترجمة في المناطق المحلية غير الإنجليزية. .TP \fBFIELDWIDTHS\fP قائمة بعروض الحقول تفصل بينها مسافات بيضاء. عند ضبطها، يحلل \fIgawk\fP الدخل إلى حقول ذات عرض ثابت، بدلًا من استخدام قيمة المتغير \fBFS\fP كفاصل للحقول. قد يُسبق كل عرض حقل اختيارياً بقيمة مفصولة بنقطتين تحدد عدد المحارف المطلوب تخطيها قبل بدء الحقل. .TP \fBFILENAME\fP اسم ملف الدخل الحالي. إذا لم تُحدد أي ملفات في سطر الأوامر، تكون قيمة \fBFILENAME\fP هي "\-". ومع ذلك، \fBFILENAME\fP غير معرف داخل قاعدة \fBBEGIN\fP (ما لم يُضبط بواسطة \fBgetline\fP). .TP \fBFNR\fP رقم سجل الدخل في ملف الدخل الحالي. .TP \fBFPAT\fP تعبير نمطي يصف محتويات الحقول في سجل ما. عند ضبطه، يحلل \fIgawk\fP الدخل إلى حقول، حيث تطابق الحقول التعبير النمطي، بدلًا من استخدام قيمة \fBFS\fP كفاصل للحقول. .TP \fBFS\fP فاصل حقول الدخل، وهو مسافة مبدئيًا. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Field\-Separators.html\fP للمزيد من التفاصيل. .TP \fBFUNCTAB\fP مصفوفة فهارسها والقيم المقابلة لها هي أسماء جميع الدوال المعرفة من قبل المستخدم أو دوال الامتداد في البرنامج. \fBملاحظة\fP: لا يجوز لك استخدام جملة \fBdelete\fP مع مصفوفة \fBFUNCTAB\fP. .TP \fBIGNORECASE\fP يتحكم في حساسية حالة الأحرف لجميع عمليات التعبيرات النمطية وسلاسل النصوص. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html\fP للمزيد من التفاصيل. .TP \fBLINT\fP يوفر تحكمًا ديناميكيًا في خيار \fB\-\^\-lint\fP من داخل برنامج \*(AK. .TP \fBNF\fP عدد الحقول في سجل الدخل الحالي. .TP \fBNR\fP العدد الإجمالي لسجلات الدخل التي شوهدت حتى الآن. .TP \fBOFMT\fP تنسيق الإخراج للأرقام، \fB"%.6g"\fP مبدئيًا. .TP \fBOFS\fP فاصل حقول الإخراج، وهو مسافة مبدئيًا. .TP \fBORS\fP فاصل سجلات الإخراج، وهو سطر جديد مبدئيًا. .TP \fBPREC\fP دقة العمل للأرقام ذات الفاصلة العائمة عشوائية الدقة، وهي 53 مبدئيًا. .TP \fBPROCINFO\fP توفر عناصر هذه المصفوفة إمكانية الوصول إلى معلومات حول برنامج \*(AK قيد التشغيل. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Auto_002dset\fP للمزيد من التفاصيل. .TP \fBROUNDMODE\fP وضع التقريب المراد استخدامه للحساب عشوائي الدقة على الأرقام، مبدئيًا \fB"N"\fP (IEEE\-754 وضع roundTiesToEven). راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Setting\-the\-rounding\-mode\fP للمزيد من التفاصيل. .TP \fBRS\fP فاصل سجلات الدخل، وهو سطر جديد مبدئيًا. .TP \fBRT\fP خاتمة السجل. يضبط \fIGawk\fP قيمة \fBRT\fP على نص الدخل الذي طابق المحرف أو التعبير النمطي المحدد بواسطة \fBRS\fP. .TP \fBRSTART\fP فهرس المحرف الأول الذي طابقته \fBmatch()\fP؛ 0 إذا لم يوجد تطابق. .TP \fBRLENGTH\fP طول السلسلة التي طابقتها \fBmatch()\fP؛ \-1 إذا لم يوجد تطابق. .TP \fBSUBSEP\fP السلسلة المستخدمة لفصل العناصر الفرعية المتعددة في عناصر المصفوفة، مبدئيًا \fB"\e034"\fP. .TP \fBSYMTAB\fP مصفوفة فهارسها هي أسماء جميع المتغيرات والمصفوفات العامة المعرفة حاليًا في البرنامج. لا يجوز لك استخدام جملة \fBdelete\fP مع مصفوفة \fBSYMTAB\fP، ولا التعيين لعناصر بفهرس ليس اسم متغير. .TP \fBTEXTDOMAIN\fP نطاق نص برنامج \*(AK؛ يُستخدم للعثور على الترجمات المحلية لسلاسل نصوص البرنامج. .SS المصفوفات تُفهرس المصفوفات بتعبير بين أقواس مربعة (\fB[\fP و \fB]\fP). إذا كان التعبير عبارة عن قائمة تعبيرات (\fIتعبير\fP، \fIتعبير\fP .\|.\|.) فإن فهرس المصفوفة هو سلسلة نصية تتكون من دمج قيمة (السلسلة) لكل تعبير، مفصولة بقيمة متغير \fBSUBSEP\fP. تُستخدم هذه الإمكانية لمحاكاة المصفوفات متعددة الأبعاد. على سبيل المثال: .PP .RS \fBi = "A";\^ j = "B";\^ k = "C"\fP .br \fBx[i, j, k] = "hello, world\en"\fP .RE .PP يعين السلسلة \fB"hello,\ world\en"\fP لعنصر المصفوفة \fBx\fP المفهرس بالسلسلة \fB"A\e034B\e034C"\fP. جميع المصفوفات في \*(AK ترابطية، أي أنها مفهرسة بقيم سلاسل نصية. .PP يمكن استخدام العامل الخاص \fBin\fP لاختبار ما إذا كانت المصفوفة تحتوي على فهرس يتكون من قيمة معينة: .PP .RS .nf \fBif (val in array) print array[val]\fP .fi .RE .PP إذا كانت المصفوفة تحتوي على فهارس متعددة، فاستخدم \fB(i, j) in array\fP. .PP يمكن استخدام بنية \fBin\fP أيضًا في حلقة \fBfor\fP للتكرار على جميع عناصر المصفوفة. ومع ذلك، فإن بنية \fB(i, j) in array\fP لا تعمل إلا في الاختبارات، وليس في حلقات \fBfor\fP. .PP يمكن حذف عنصر من مصفوفة باستخدام عبارة \fBdelete\fP. كما يمكن استخدام عبارة \fBdelete\fP لحذف كامل محتويات المصفوفة، وذلك بمجرد تحديد اسم المصفوفة دون دليل سفلي. .PP يدعم \fIgawk\fP المصفوفات حقيقية التعدد في الأبعاد. ولا يشترط أن تكون هذه المصفوفات «مستطيلة» كما هو الحال في C أو ++C. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Arrays\fP لمزيد من التفاصيل. .SS "فضاءات الأسماء" يوفر \fIGawk\fP خاصية \fIفضاء أسماء\fP بسيطة للمساعدة في الالتفاف على حقيقة أن جميع المتغيرات في AWK هي متغيرات عامة. .PP يتكون \fIالاسم المؤهل\fP من معرفين بسيطين يربط بينهما نقطتان مزدوجتان (\fB::\fP). يمثل المعرف الأيسر فضاء الأسماء، ويمثل المعرف الأيمن المتغير بداخله. تعتبر جميع الأسماء البسيطة (غير المؤهلة) في فضاء الأسماء «الحالي»؛ وفضاء الأسماء المبدئي هو \fBawk\fP. ومع ذلك، فإن المعرفات البسيطة التي تتكون حصراً من أحرف كبيرة تُجبر على الدخول في فضاء أسماء \fBawk\fP، حتى لو كان فضاء الأسماء الحالي مختلفاً. .PP يمكنك تغيير فضاء الأسماء الحالي باستخدام توجيه \fB@namespace "\fP\fIالاسم\^\fP\fB"\fP. .PP لا يجوز استخدام أسماء الدوال المدمجة القياسية والمعرفة مسبقاً كأسماء لفضاءات الأسماء. ويمكن استخدام أسماء الدوال الإضافية التي يوفرها \fIgawk\fP كأسماء لفضاءات أسماء أو كمعرفات بسيطة في فضاءات أسماء أخرى. لمزيد من التفاصيل، راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces\fP. .SS "تنميط المتغيرات وتحويلها" قد تكون المتغيرات والحقول أرقاماً (بفاصلة عائمة)، أو سلاسل نصية، أو كليهما. وقد تكون أيضاً تعبيرات نمطية. ويعتمد تفسير قيمة المتغير على سياقه. فإذا استخدم في تعبير عددي، عومل كعدد؛ وإذا استخدم كسلسلة نصية عومل كسلسلة نصية. .PP لإجبار متغير على أن يُعامل كعدد، أضف صفراً إليه؛ ولإجباره على أن يُعامل كسلسلة نصية، ادمجه مع السلسلة الفارغة. .PP المتغيرات غير المهيأة لها القيمة العددية صفر وقيمة السلسلة النصية "" (السلسلة الصففرية أو الفارغة). .PP عندما يجب تحويل سلسلة نصية إلى عدد، يُنجز التحويل باستخدام \fIstrtod\fP(3). ويُحول العدد إلى سلسلة نصية باستخدام قيمة \fBCONVFMT\fP كسلسلة تنسيق لـ \fIsprintf\fP(3)، مع استخدام القيمة العددية للمتغير كمعامل. ومع ذلك، رغم أن جميع الأعداد في \*(AK هي بفاصلة عائمة، إلا أن القيم الصحيحة تُحول \fIدائماً\fP كأعداد صحيحة. .PP يجري \fIGawk\fP المقارنات على النحو التالي: إذا كان المتغيران عدديين، تجري المقارنة عددياً. وإذا كانت إحدى القيمتين عددية والأخرى لها قيمة نصية وهي عبارة عن «سلسلة نصية عددية»، فتجري المقارنات أيضاً عددياً. خلاف ذلك، تُحول القيمة العددية إلى سلسلة نصية وتُجرى مقارنة نصية. وتتم مقارنة السلسلتين النصيتين، بطبيعة الحال، كسلاسل نصية. .PP لاحظ أن الثوابت النصية، مثل \fB"57"\fP، ليست سلاسل نصية عددية، بل هي ثوابت نصية. تنطبق فكرة «السلسلة النصية العددية» فقط على الحقول، ومدخلات \fBgetline\fP، و\fBFILENAME\fP، وعناصر \fBARGV\fP، وعناصر \fBENVIRON\fP وعناصر المصفوفة التي أُنشئت بواسطة \fBsplit()\fP أو \fBpatsplit()\fP والتي تكون سلاسل نصية عددية. الفكرة الأساسية هي أن \fIمدخلات المستخدم\fP، وفقط مدخلات المستخدم التي تبدو عددية، يجب أن تُعامل بهذه الطريقة. .SS "الثوابت الثمانية والست عشرية" يمكنك استخدام الثوابت الثمانية والست عشرية بنمط لغة C في كود المصدر لبرنامج AWK الخاص بك. على سبيل المثال، القيمة الثمانية \fB011\fP تساوي \fB9\fP بالعشري، والقيمة الست عشرية \fB0x11\fP تساوي 17 بالعشري. .SS "الثوابت النصية" الثوابت النصية في \*(AK هي تسلسلات من المحارف المحصورة بين علامتي اقتباس مزدوجتين (مثل \fB"قيمة"\fP). داخل السلاسل النصية، يُتعرف على بعض \fIتسلسلات الهروب\fP، كما هو الحال في C. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Escape\-Sequences\fP لمزيد من التفاصيل. .SS "ثوابت التعبيرات النمطية" ثابت التعبير النمطي هو تسلسل من المحارف المحصورة بين خطين مائلين للأمام (مثل \fB/قيمة/\fP). .PP يمكن أيضاً استخدام تسلسلات الهروب الموضحة في الدليل داخل التعبيرات النمطية الثابتة (مثل، \fB/[\ \et\ef\en\er\ev]/\fP يطابق محارف المسافات البيضاء). .PP يوفر \fIGawk\fP ثوابت تعبيرات نمطية \fIقوية التنميط\fP. وتُكتب مبدوءة برمز \fB@\fP (مثل هكذا: \fB@/قيمة/\fP). يمكن تخصيص هذه الثوابت للمتغيرات القياسية (متغيرات، عناصر مصفوفة) وتمريرها إلى الدوال التي يعرفها المستخدم. المتغيرات التي خصصت بهذه الطريقة تصبح من نوع تعبير نمطي. .SH "الأنماط والإجراءات" \*(AK هي لغة سطرية المنحى. يأتي النمط أولاً، ثم الإجراء. تُحصر عبارات الإجراء داخل \fB{\fP و\fB}\fP. يمكن أن يغيب النمط، أو يغيب الإجراء، ولكن ليس كليهما بالطبع. إذا غاب النمط، ينفذ الإجراء لكل سجل من سجلات المدخلات. وغياب الإجراء يعادل .RS .PP \fB{ print }\fP .RE .PP التي تطبع السجل كاملاً. .PP تبدأ التعليقات بمحرف \fB#\fP، وتستمر حتى نهاية السطر. ويمكن استخدام الأسطر الفارغة للفصل بين العبارات. عادةً ما تنتهي العبارة بسطر جديد، ومع ذلك، ليس هذا هو الحال بالنسبة للأسطر التي تنتهي بفاصلة، أو \fB{\fP، أو \fB?\fP، أو \fB:\fP، أو \fB&&\fP، أو \fB||\fP. والأسطر التي تنتهي بـ \fBdo\fP أو \fBelse\fP تستمر عباراتها آلياً في السطر التالي. في حالات أخرى، يمكن مواصلة السطر بإنهاء السطر بـ «\e»، وفي هذه الحالة يُتجاهل السطر الجديد. ومع ذلك، فإن «\e» بعد \fB#\fP ليست ذات ميزة خاصة. .PP يمكن وضع عبارات متعددة في سطر واحد بالفصل بينها بـ «;». وينطبق هذا على العبارات داخل جزء الإجراء في زوج النمط\-الإجراء (الحالة المعتادة)، وعلى عبارات النمط\-الإجراء نفسها. .SS الأنماط قد تكون أنماط \*(AK أحد ما يلي: .PP .RS .nf \fBBEGIN\fP \fBEND\fP \fBBEGINFILE\fP \fBENDFILE\fP \fB/\fP\fIتعبير نمطي\fP\fB/\fP \fIتعبير علائقي\fP \fIنمط\fP\fB && \fP\fIنمط\fP \fIنمط\fP\fB || \fP\fIنمط\fP \fIنمط\fP\fB ?\& \fP\fIنمط\fP\fB : \fP\fIنمط\fP \fB(\fP\fIنمط\fP\fB)\fP \fB!\&\fP\fI نمط\fP \fIنمط1\fP\fB, \fP\fIنمط2\fP .fi .RE .PP \fBBEGIN\fP و\fBEND\fP هما نوعان خاصان من الأنماط لا يتم اختبارهما مقابل المدخلات. تُدمج أجزاء الإجراء لجميع أنماط \fBBEGIN\fP كما لو كانت جميع العبارات قد كُتبت في قاعدة \fBBEGIN\fP واحدة. وتُنفذ قبل قراءة أي من المدخلات. وبالمثل، تُدمج جميع قواعد \fBEND\fP، وتُنفذ عند نفاد جميع المدخلات (أو عند تنفيذ عبارة \fBexit\fP). لا يمكن دمج نمطي \fBBEGIN\fP و\fBEND\fP مع أنماط أخرى في تعبيرات الأنماط. كما لا يمكن أن يغيب جزء الإجراء في نمطي \fBBEGIN\fP و\fBEND\fP. .PP \fBBEGINFILE\fP و\fBENDFILE\fP هما أنماط خاصة إضافية تُنفذ إجراءاتها قبل قراءة السجل الأول من كل ملف مدخلات في سطر الأوامر وبعد قراءة السجل الأخير من كل ملف. داخل قاعدة \fBBEGINFILE\fP، تكون قيمة \fBERRNO\fP هي السلسلة الفارغة إذا فُتح الملف بنجاح. وخلاف ذلك، فهناك مشكلة ما في الملف ويجب أن يستخدم الكود \fBnextfile\fP لتخطيه. إذا لم يُفعل ذلك، فإن \fIgawk\fP يصدر خطأه الفادح المعتاد للملفات التي لا يمكن فتحها. .PP بالنسبة لأنماط \fB/\fP\fIالتعبير النمطي\fP\fB/\fP، تُنفذ العبارة المرتبطة به لكل سجل مدخلات يطابق التعبير النمطي. التعبيرات النمطية هي نفسها جوهرياً تلك الموجودة في \fIegrep\fP(1). راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Regexp.html\fP لمزيد من التفاصيل حول التعبيرات النمطية. .PP قد يستخدم \fIالتعبير العلائقي\fP أي من المعاملات المحددة أدناه في قسم الإجراءات. وهذه تختبر عموماً ما إذا كانت حقول معينة تطابق تعبيرات نمطية معينة. .PP المعاملات \fB&&\fP و\fB||\fP و\fB!\fP هي معامل «و» المنطقي، و«أو» المنطقي، و«ليس» المنطقي على التوالي، كما في C. وهي تجري تقييماً قصير المدى (short\-circuit)، كما في C أيضاً، وتُستخدم لدمج تعبيرات الأنماط الأكثر بساطة. وكما هو الحال في معظم اللغات، يمكن استخدام الأقواس لتغيير ترتيب التقييم. .PP المعامل \fB?\^:\fP هو مثل نفس المعامل في C. إذا كان النمط الأول صحيحاً فإن النمط المستخدم للاختبار هو النمط الثاني، وإلا فهو الثالث. يتم تقييم واحد فقط من النمطين الثاني أو الثالث. .PP يُسمى شكل التعبير \fIنمط1\fP\fB, \fP\fIنمط2\fP بـ \fIنمط النطاق\fP. فهو يطابق جميع سجلات المدخلات بدءاً من السجل الذي يطابق \fIنمط1\fP، ويستمر حتى السجل الذي يطابق \fIنمط2\fP، بما في ذلك السجلين. ولا يمتزج مع أي نوع آخر من تعبيرات الأنماط. .SS الإجراءات تُحصر عبارات الإجراء بين أقواس معقوفة، \fB{\fP و\fB}\fP. وتتكون عبارات الإجراء من عبارات التخصيص والشرط والحلقات المعتادة الموجودة في معظم اللغات. والمعاملات وعبارات التحكم وعبارات الإدخال/الإخراج المتاحة مصممة على غرار تلك الموجودة في لغة C. .SS المعاملات المعاملات في \*(AK، بترتيب تنازلي للأولوية، هي: .TP "\w'\fB*= /= %= ^=\fR'u+1n" \fB(\fP\&.\|.\|.\fB)\fP التجميع .TP \fB$\fP مرجع الحقل. .TP \fB++ \-\^\-\fP الزيادة والنقصان، كلاهما قبلي وبعدي. .TP \fB^\fP الرفع للقوة (الأس). .TP \fB+ \- !\fP الزائد الأحادي، والناقص الأحادي، والنفي المنطقي. .TP \fB* / %\fP الضرب والقسمة وباقي القسمة. .TP \fB+ \-\fP الجمع والطرح. .TP \fIspace\fP دمج السلاسل النصية. .TP \fB| |&\fP دخل/خرج موجه لكل من \fBgetline\fP و\fBprint\fP و\fBprintf\fP. .TP \fB< > <= >= == !=\fP المعاملات العلائقية العادية. .TP \fB~ !~\fP مطابقة التعبير النمطي، والمطابقة المنفية. .TP \fBin\fP عضوية المصفوفة. .TP \fB&&\fP «و» المنطقية. .TP \fB||\fP «أو» المنطقية. .TP \fB?:\fP التعبير الشرطي للغة C. وله الصيغة \fIتعبير1\fP\fB ? \fP\fIتعبير2\fP\fB : \fP\fIتعبير3\/\fP. إذا كان \fIتعبير1\fP صحيحاً، فإن قيمة التعبير هي \fIتعبير2\fP، وإلا فهي \fIتعبير3\fP. يتم تقييم واحد فقط من التعبيرين \fIتعبير2\fP أو \fIتعبير3\fP. .TP \fB= += \-= *= /= %= ^=\fP التخصيص. كلاهما مدعوم: التخصيص المطلق \fB(\fP\fIمتغير\fP\fB = \fP\fIقيمة\fP\fB)\fP وتخصيص المعامل (الأشكال الأخرى). .SS "عبارات التحكم" عبارات التحكم هي كما يلي: .PP .RS .nf \fBif (\fP\fIشرط\fP\fB) \fP\fIعبارة\fP [ \fBelse\fP\fI عبارة \fP] \fBwhile (\fP\fIشرط\fP\fB) \fP\fIعبارة\fP \fBdo \fP\fIعبارة \fP\fBwhile (\fP\fIشرط\fP\fB)\fP \fBfor (\fP\fIتعبير1\fP\fB; \fP\fIتعبير2\fP\fB; \fP\fIتعبير3\fP\fB) \fP\fIعبارة\fP \fBfor (\fP\fIمتغير \fP\fBin\fP\fI مصفوفة\fP\fB) \fP\fIعبارة\fP \fBbreak\fP \fBcontinue\fP \fBdelete \fP\fIمصفوفة\^\fP\fB[\^\fP\fIدليل\^\fP\fB]\fP \fBdelete \fP\fIمصفوفة\^\fP \fBexit\fP [ \fIتعبير\fP ] \fB{ \fP\fIعبارات \fP\fB}\fP \fBswitch (\fP\fIتعبير\fP\fB) { case \fP\fIقيمة\fP\fB|\fP\fIتعبير_نمطي\fP\fB : \fP\fIعبارة \&.\^.\^. \fP[ \fBdefault: \fP\fIعبارة \fP] \fB}\fP .fi .RE .SS "عبارات الدخل/الخرج" عبارات الإدخال/الإخراج هي كما يلي: .TP "\w'\fBprintf \fIfmt, expr-list\fR'u+1n" \fBclose(\fP\fIملف \fP[\fB, \fP\fIكيف\fP]\fB)\fP أغلق ملفاً مفتوحاً أو أنبوباً أو عملية مرافقة. المعامل الاختياري \fIكيف\fP يجب استخدامه فقط عند إغلاق طرف واحد من أنبوب ثنائي الاتجاه إلى عملية مرافقة. يجب أن يكون قيمة نصية، إما \fB"to"\fP أو \fB"from"\fP. .TP \fBgetline\fP عيّن قيمة \fB$0\fP من سجل المدخلات التالي؛ وعيّن قيم \fBNF\fP و\fBNR\fP و\fBFNR\fP و\fBRT\fP. .TP \fBgetline <\fP\fIملف\fP عيّن قيمة \fB$0\fP من السجل التالي في \fIالملف\fP؛ وعيّن قيم \fBNF\fP و\fBRT\fP. .TP \fBgetline\fP\fI متغير\fP عيّن قيمة \fIالمتغير\fP من سجل المدخلات التالي؛ وعيّن قيم \fBNR\fP و\fBFNR\fP و\fBRT\fP. .TP \fBgetline\fP\fI متغير\fP\fB <\fP\fIملف\fP عيّن قيمة \fIالمتغير\fP من السجل التالي في \fIالملف\fP؛ وعيّن قيمة \fBRT\fP. .TP \fIأمر\fP\fB | getline \fP[\fIمتغير\fP] نفذ \fIالأمر\fP، مع توجيه الخرج إما إلى \fB$0\fP أو \fIالمتغير\fP، كما هو موضح أعلاه، وإلى \fBRT\fP. .TP \fIأمر\fP\fB |& getline \fP[\fIمتغير\fP] نفذ \fIالأمر\fP كعملية مرافقة مع توجيه الخرج إما إلى \fB$0\fP أو \fIالمتغير\fP، كما هو موضح أعلاه، وإلى \fBRT\fP. (يمكن أن يكون \fIالأمر\fP أيضاً مقبساً. راجع القسم الفرعي \fBأسماء الملفات الخاصة\fP أدناه.) .TP \&\fBfflush(\fP[\fIملف\^\fP]\fB)\fP أفرغ أي مخازن وسيطة مرتبطة بـ \fIالملف\fP أو الأنبوب المفتوح للخرج. إذا كان \fIالملف\fP غائباً أو كان سلسلة صفرية، فأفرغ جميع ملفات وأنابيب الخرج المفتوحة. .TP \fBnext\fP توقف عن معالجة سجل المدخلات الحالي. اقرأ سجل المدخلات التالي وابدأ المعالجة من جديد مع النمط الأول في برنامج \*(AK. عند الوصول إلى نهاية بيانات المدخلات، تُنفذ أي قاعدة (قواعد) \fBEND\fP. .TP \fBnextfile\fP توقف عن معالجة ملف المدخلات الحالي. سجل المدخلات التالي الذي سيُقرأ سيأتي من ملف المدخلات التالي. حَدّث \fBFILENAME\fP و\fBARGIND\fP، وأعد تعيين \fBFNR\fP إلى 1، وابدأ المعالجة من جديد مع النمط الأول في برنامج \*(AK. عند الوصول إلى نهاية بيانات المدخلات، تُنفذ أي قاعدة (قواعد) \fBENDFILE\fP و\fBEND\fP. .TP \fBprint\fP اطبع السجل الحالي. يُنهى سجل المخرجات بقيمة \fBORS\fP. .TP \fBprint\fP\fI expr\-list\fP اطبع التعبيرات. يُفصل بين كل تعبير بكلمة \fBOFS\fP. يُنهى سجل المخرجات بقيمة \fBORS\fP. .TP \fBprint\fP\fI expr\-list\fP\fB >\fP\fIfile\fP اطبع التعبيرات في \fIfile\fP. يُفصل بين كل تعبير بقيمة \fBOFS\fP. يُنهى سجل المخرجات بقيمة \fBORS\fP. .TP \fBprintf\fP\fI fmt, expr\-list\fP نسّق واطبع. .TP \fBprintf\fP\fI fmt, expr\-list\fP\fB >\fP\fIfile\fP نسّق واطبع في \fIfile\fP. .TP \fBsystem(\fP\fIcmd\-line\fP\fB)\fP نفّذ الأمر \fIcmd\-line\fP، وأعد حالة الخروج. (قد لا يتوفر هذا في أنظمة غير \*(PX.) راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/I_002fO\-Functions.html#I_002fO\-Functions\fP للحصول على كامل التفاصيل حول حالة الخروج. .PP يُسمح بإعادة توجيه مخرجات إضافية لـ \fBprint\fP و \fBprintf\fP. .TP \fBprint .\|.\|.\& >>\fP\fI file\fP ألحق المخرجات بـ \fIfile\fP. .TP \fBprint .\|.\|.\& |\fP\fI command\fP اكتب في أنبوب. .TP \fBprint .\|.\|.\& |&\fP\fI command\fP أرسل البيانات إلى عملية مرافقة أو مقبس. (راجع أيضًا القسم الفرعي \fBSpecial File Names\fP أدناه.) .PP تُعيد دالة \fBgetline\fP القيمة 1 عند النجاح، وصفرًا عند نهاية الملف، و \-1 عند حدوث خطأ. إذا أشارت قيمة \fIerrno\fP(3) إلى إمكانية إعادة محاولة عملية الإدخال/الإخراج، وضُبطت \fBPROCINFO["\fP\fIinput\^\fP\fB", "RETRY"]\fP، تُعاد القيمة \-2 بدلًا من \-1، ويمكن محاولة استدعاءات أخرى لـ \fBgetline\fP. عند حدوث خطأ، تُضبط \fBERRNO\fP بسلسلة تصف المشكلة. .PP \fBملاحظة\fP: الفشل في فتح مقبس ثنائي الاتجاه يؤدي إلى إرجاع خطأ غير فتاك إلى الدالة المستدعِية. في حال استخدام أنبوب أو عملية مرافقة أو مقبس مع \fBgetline\fP، أو من \fBprint\fP أو \fBprintf\fP داخل حلقة، \fIيجب\fP استخدام \fBclose()\fP لإنشاء نسخ جديدة من الأمر أو المقبس. لا يغلق \*(AK الأنابيب أو المقابس أو العمليات المرافقة آليًا عند إرجاعها لعلامة نهاية الملف (EOF). .PP تتشابه إصدارات \*(AK من جملة \fBprintf\fP ودالة \fBsprintf()\fP مع تلك الموجودة في لغة C. للتفاصيل، راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Printf.html\fP. .SS "أسماء الملفات الخاصة" عند إجراء إعادة توجيه للإدخال/الإخراج من \fBprint\fP أو \fBprintf\fP إلى ملف، أو عبر \fBgetline\fP من ملف، يتعرف \fIgawk\fP على أسماء ملفات خاصة داخليًا. تسمح أسماء الملفات هذه بالوصول إلى واصفات الملفات المفتوحة الموروثة من العملية الأب لـ \fIgawk\fP (عادةً الصدفة). يمكن أيضًا استخدام أسماء الملفات هذه في سطر الأوامر لتسمية ملفات البيانات. أسماء الملفات هي: .TP "\w'\fB/dev/stdout\fR'u+1n" \fB\-\fP الإدخال القياسي. .TP \fB/dev/stdin\fP الإدخال القياسي. .TP \fB/dev/stdout\fP المخرجات القياسية. .TP \fB/dev/stderr\fP مخرجات الخطأ القياسية. .TP \fB/dev/fd/\^\fP\fIn\fP الملف المرتبط بواصف الملف المفتوح \fIn\fP. .PP يمكن استخدام أسماء الملفات الخاصة التالية مع عامل العملية المرافقة \fB|&\fP لإنشاء اتصالات شبكة TCP/IP: .TP .PD 0 \fB/inet/tcp/\fP\fIlport\fP\fB/\fP\fIrhost\fP\fB/\fP\fIrport\fP .TP .PD 0 \fB/inet4/tcp/\fP\fIlport\fP\fB/\fP\fIrhost\fP\fB/\fP\fIrport\fP .TP .PD \fB/inet6/tcp/\fP\fIlport\fP\fB/\fP\fIrhost\fP\fB/\fP\fIrport\fP ملفات لاتصال TCP/IP على المنفذ المحلي \fIlport\fP بالمضيف البعيد \fIrhost\fP على المنفذ البعيد \fIrport\fP. استخدم المنفذ \fB0\fP ليقوم النظام باختيار منفذ. استخدم \fB/inet4\fP لفرض اتصال IPv4، و \fB/inet6\fP لفرض اتصال IPv6. تستخدم \fB/inet\fP المجردة القيمة المبدئية للنظام (على الأرجح IPv4). صالحة للاستخدام فقط مع عامل الإدخال/الإخراج ثنائي الاتجاه \fB|&\fP. .TP .PD 0 \fB/inet/udp/\fP\fIlport\fP\fB/\fP\fIrhost\fP\fB/\fP\fIrport\fP .TP .PD 0 \fB/inet4/udp/\fP\fIlport\fP\fB/\fP\fIrhost\fP\fB/\fP\fIrport\fP .TP .PD \fB/inet6/udp/\fP\fIlport\fP\fB/\fP\fIrhost\fP\fB/\fP\fIrport\fP مشابه، ولكن يستخدم UDP/IP بدلًا من TCP/IP. \fBدعم UDP مهجور وسيُزال في المستقبل.\fP .SS "الدوال العددية" يحتوي \*(AK على الدوال الحسابية المضمنة التالية: .TP "\w'\fBsrand(\fR[\fIexpr\^\fR]\fB)\fR'u+1n" \fBatan2(\fP\fIy\fP\fB,\fP\fI x\fP\fB)\fP أعد ظل الزاوية العكسي لـ \fIy/x\fP بالراديان. .TP \fBcos(\fP\fIexpr\fP\fB)\fP أعد جيب تمام \fIexpr\fP، والمقدر بالراديان. .TP \fBexp(\fP\fIexpr\fP\fB)\fP الدالة الأسية. .TP \fBint(\fP\fIexpr\fP\fB)\fP بتر إلى عدد صحيح. .ig .TP \fBintdiv(\fInum\fB, \fIdenom\fB, \fIresult\fB)\fR Truncate \fInum\fR and \fIdenom\fR to integers. Return the quotient of \fInum\fR divided by \fIdenom\fR in \fIresult\fB["quotient"]\fR and the remainder in \fIresult\fB["remainder"]\fR. This is a \fIgawk\fR extension, primarily of value when working with arbitrarily large integers. .. .TP \fBlog(\fP\fIexpr\fP\fB)\fP دالة اللوغاريتم الطبيعي. .TP \fBrand()\fP أعد عددًا عشوائيًا \fIN\fP، بين الصفر والواحد، بحيث يكون 0 \(<= \fIN\fP < 1. .TP \fBsin(\fP\fIexpr\fP\fB)\fP أعد جيب \fIexpr\fP، والمقدر بالراديان. .TP \fBsqrt(\fP\fIexpr\fP\fB)\fP أعد الجذر التربيعي لـ \fIexpr\fP. .TP \&\fBsrand(\fP[\fIexpr\^\fP]\fB)\fP استخدم \fIexpr\fP كبذرة جديدة لمولد الأعداد العشوائية. إذا لم يُوفّر \fIexpr\fP، استخدم وقت اليوم. أعد البذرة السابقة لمولد الأعداد العشوائية. .SS "دوال السلاسل النصية" يحتوي \fIGawk\fP على دوال السلاسل النصية المضمنة التالية؛ التفاصيل متوفرة في \fIhttps://www.gnu.org/software/gawk/manual/html_node/String\-Functions\fP. .TP "\w'\fBsprintf(\fIfmt\^\fB, \fIexpr-list\^\fB)\fR'u+1n" \fBasort(\fP\fIs \fP[\fB, \fP\fId\fP [\fB, \fP\fIhow\fP] ]\fB)\fP أعد عدد العناصر في المصفوفة المصدر \fIs\fP. فرز محتويات \fIs\fP باستخدام قواعد \fIgawk\fP العادية لمقارنة القيم، واستبدل فهارس القيم المفروزة \fIs\fP بأعداد صحيحة متسلسلة تبدأ من 1. إذا حُددت مصفوفة الوجهة الاختيارية \fId\fP، انسخ \fIs\fP أولًا إلى \fId\fP، ثم افرز \fId\fP، مع ترك فهارس المصفوفة المصدر \fIs\fP دون تغيير. تتحكم السلسلة النصية الاختيارية \fIhow\fP في اتجاه ووضع المقارنة. القيم الصالحة لـ \fIhow\fP موصوفة في \fIhttps://www.gnu.org/software/gawk/manual/html_node/String\-Functions.html#String\-Functions\fP. يُسمح لـ \fIs\fP و \fId\fP بأن يكونا نفس المصفوفة؛ وهذا يكون منطقيًا فقط عند توفير الوسيط الثالث أيضًا. .TP \fBasorti(\fP\fIs \fP[\fB, \fP\fId\fP [\fB, \fP\fIhow\fP] ]\fB)\fP أعد عدد العناصر في المصفوفة المصدر \fIs\fP. السلوك هو نفسه سلوك \fBasort()\fP، باستثناء استخدام فهارس (indices) المصفوفة للفرز، وليس قيم المصفوفة. عند الانتهاء، تُفهرس المصفوفة عدديًا، وتكون القيم هي الفهارس الأصلية. تُفقد القيم الأصلية؛ لذا وفّر مصفوفة ثانية إذا كنت ترغب في الحفاظ على الأصل. الغرض من السلسلة النصية الاختيارية \fIhow\fP هو نفسه في \fBasort()\fP. هنا أيضًا، يُسمح لـ \fIs\fP و \fId\fP بأن يكونا نفس المصفوفة؛ وهذا يكون منطقيًا فقط عند توفير الوسيط الثالث أيضًا. .TP \fBgensub(\fP\fIr\fP\fB, \fP\fIs\fP\fB, \fP\fIh \fP[\fB, \fP\fIt\fP]\fB)\fP ابحث في السلسلة المستهدفة \fIt\fP عن تطابقات للتعبير النمطي \fIr\fP. إذا كانت \fIh\fP سلسلة تبدأ بـ \fBg\fP أو \fBG\fP، فاستبدل كل تطابقات \fIr\fP بـ \fIs\fP. خلاف ذلك، \fIh\fP هو رقم يشير إلى أي تطابق لـ \fIr\fP يجب استبداله. إذا لم يُوفّر \fIt\fP، استخدم \fB$0\fP بدلًا منه. داخل نص الاستبدال \fIs\fP، يمكن استخدام التسلسل \fB\e\fP\fIn\fP، حيث \fIn\fP رقم من 1 إلى 9، للإشارة فقط إلى النص الذي طابق التعبير الفرعي المحصور بين قوسين رقم \fIn\fP. يمثل التسلسل \fB\e0\fP كامل النص المطابق، وكذلك يفعل الحرف \fB&\fP. على عكس \fBsub()\fP و \fBgsub()\fP، تُعاد السلسلة المعدلة كنتيجة للدالة، ولا تُغير السلسلة المستهدفة الأصلية. .TP \fBgsub(\fP\fIr\fP\fB, \fP\fIs \fP[\fB, \fP\fIt\fP]\fB)\fP لكل سلسلة فرعية تطابق التعبير النمطي \fIr\fP في السلسلة \fIt\fP، استبدلها بالسلسلة \fIs\fP، وأعد عدد الاستبدالات. إذا لم يُوفّر \fIt\fP، استخدم \fB$0\fP. يُستبدل أي وسم \fB&\fP في نص الاستبدال بالنص الذي طُوبق فعليًا. استخدم \fB\e&\fP للحصول على \fB&\fP حرفي. (يجب كتابة هذا كـ \fB"\e\e&"\fP؛ راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Gory\-Details.html#Gory\-Details\fP لمناقشة أوفى حول قواعد علامات الآند (ampersands) والشرطات المائلة الخلفية في نص الاستبدال لـ \fBsub()\fP و \fBgsub()\fP و \fBgensub()\fP.) .TP \fBindex(\fP\fIs\fP\fB,\fP\fI t\fP\fB)\fP أعد فهرس السلسلة \fIt\fP في السلسلة \fIs\fP، أو صفرًا إذا كانت \fIt\fP غير موجودة. (وهذا يعني أن فهارس الحروف تبدأ من واحد.) .TP \fBlength(\fP[\fIs\fP]\fB)\fP أعد طول السلسلة \fIs\fP، أو طول \fB$0\fP إذا لم تُوفّر \fIs\fP. مع وسيط مصفوفة، تعيد \fBlength()\fP عدد العناصر في المصفوفة. .TP \fBmatch(\fP\fIs\fP\fB, \fP\fIr \fP[\fB, \fP\fIa\fP]\fB)\fP أعد الموضع في \fIs\fP حيث يظهر التعبير النمطي \fIr\fP، أو صفرًا إذا كان \fIr\fP غير موجود، واضبط قيم \fBRSTART\fP و \fBRLENGTH\fP. لاحظ أن ترتيب الوسائط هو نفسه بالنسبة لعامل \fB~\fP: \fIstr\fP\fB ~\fP \fIre\fP. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/String\-Functions.html#String\-Functions\fP لوصف كيفية ملء المصفوفة \fIa\fP إذا تم توفيرها. .TP \fBpatsplit(\fP\fIs\fP\fB, \fP\fIa \fP[\fB, \fP\fIr\fP [\fB, \fP\fIseps\fP] ]\fB)\fP قسّم السلسلة \fIs\fP إلى المصفوفة \fIa\fP ومصفوفة الفواصل \fIseps\fP بناءً على التعبير النمطي \fIr\fP، وأعد عدد الحقول. قيم العناصر هي أجزاء \fIs\fP التي طابقت \fIr\fP. قيمة \fBseps[\fP\fIi\fP\fB]\fP هي الفاصل (الذي قد يكون فارغًا) الذي ظهر بعد \fBa[\fP\fIi\fP\fB]\fP. قيمة \fBseps[0]\fP هي الفاصل البادئ (الذي قد يكون فارغًا). إذا حُذف \fIr\fP، تُستخدم \fBFPAT\fP بدلًا منه. تُمسح المصفوفتان \fIa\fP و \fIseps\fP أولًا. يسلك التقسيم سلوكًا مطابقًا لتقسيم الحقول باستخدام \fBFPAT\fP. .TP \fBsplit(\fP\fIs\fP\fB, \fP\fIa \fP[\fB, \fP\fIr\fP [\fB, \fP\fIseps\fP] ]\fB)\fP قسّم السلسلة \fIs\fP إلى المصفوفة \fIa\fP ومصفوفة الفواصل \fIseps\fP بناءً على التعبير النمطي \fIr\fP، وأعد عدد الحقول. إذا حُذف \fIr\fP، تُستخدم \fBFS\fP بدلًا منه. تُمسح المصفوفتان \fIa\fP و \fIseps\fP أولًا. \fBseps[\fP\fIi\fP\fB]\fP هو فاصل الحقول الذي طابقه \fIr\fP بين \fBa[\fP\fIi\fP\fB]\fP و \fBa[\fP\fIi\fP\fB+1]\fP. يسلك التقسيم سلوكًا مطابقًا لتقسيم الحقول. .TP \fBsprintf(\fP\fIfmt\^\fP\fB,\fP\fI expr\-list\^\fP\fB)\fP اطبع \fIexpr\-list\fP وفقًا لـ \fIfmt\fP، وأعد السلسلة الناتجة. .TP \fBstrtonum(\fP\fIstr\fP\fB)\fP افحص \fIstr\fP، وأعد قيمتها العددية. إذا بدأت \fIstr\fP بصفر \fB0\fP بادئ، فتعامل معها كعدد ثماني. إذا بدأت بـ \fB0x\fP أو \fB0X\fP بادئة، فتعامل معها كعدد ست عشري. خلاف ذلك، افترض أنها عدد عشري. .TP \fBsub(\fP\fIr\fP\fB, \fP\fIs \fP[\fB, \fP\fIt\fP]\fB)\fP تمامًا مثل \fBgsub()\fP، ولكن تستبدل فقط أول سلسلة فرعية مطابقة. تعيد إما صفرًا أو واحدًا. .TP \fBsubstr(\fP\fIs\fP\fB, \fP\fIi \fP[\fB, \fP\fIn\fP]\fB)\fP أعد السلسلة الفرعية المكونة من \fIn\fP حرفًا على الأكثر من \fIs\fP بدءًا من \fIi\fP. إذا حُذف \fIn\fP، استخدم بقية \fIs\fP. .TP \fBtolower(\fP\fIstr\fP\fB)\fP أعد نسخة من السلسلة \fIstr\fP، مع تحويل جميع الأحرف الكبيرة في \fIstr\fP إلى مقابلاتها الصغيرة. تُترك الأحرف غير الأبجدية دون تغيير. .TP \fBtoupper(\fP\fIstr\fP\fB)\fP أعد نسخة من السلسلة \fIstr\fP، مع تحويل جميع الأحرف الصغيرة في \fIstr\fP إلى مقابلاتها الكبيرة. تُترك الأحرف غير الأبجدية دون تغيير. .PP يدعم \fIGawk\fP المحارف متعددة البايتات. وهذا يعني أن \fBindex()\fP و \fBlength()\fP و \fBsubstr()\fP و \fBmatch()\fP تعمل جميعها من منظور المحارف، وليس البايتات. .SS "دوال الوقت" يوفر \fIGawk\fP الدوال التالية للحصول على الطوابع الزمنية وتنسيقها. التفاصيل متوفرة في \fIhttps://www.gnu.org/software/gawk/manual/html_node/Time\-Functions\fP. .TP "\w'\fBsystime()\fR'u+1n" \fBmktime(\fP\fIdatespec\fP [\fB, \fP\fIutc\-flag\fP]\fB)\fP حوّل \fIdatespec\fP إلى طابع زمني بنفس الشكل الذي تعيده دالة \fBsystime()\fP، وأعد النتيجة. إذا وُجد \fIutc\-flag\fP وكان غير صفري أو غير فارغ، يُفترض أن الوقت بنظام UTC؛ وخلاف ذلك، يُفترض أن الوقت بالتوقيت المحلي. إذا لم تحتوي \fIdatespec\fP على عناصر كافية أو إذا كان الوقت الناتج خارج النطاق، تعيد \fBmktime()\fP القيمة \-1. راجع \fIhttps://www.gnu.org/software/gawk/manual/html_node/Time\-Functions.html#Time\-Functions\fP لتفاصيل \fIdatespec\fP. .TP \fBstrftime(\fP[\fIالتنسيق \fP[\fB, \fP\fIالطابع_الزمني\fP[\fB, \fP\fIعلم_utc\fP]]]\fB)\fP يُنَسَّق \fIالطابع_الزمني\fP وفقًا للمواصفات في \fIالتنسيق\fP. إذا وُجد \fIعلم_utc\fP وكان غير صفري أو غير فارغ، فستكون النتيجة بتوقيت UTC، وإلا فستكون النتيجة بالتوقيت المحلي. يجب أن يكون \fIالطابع_الزمني\fP على نفس الهيئة التي تعيدها \fBsystime()\fP. إذا فُقد \fIالطابع_الزمني\fP، فسيُستخدم وقت اليوم الحالي. إذا فُقد \fIالتنسيق\fP، فسيُستخدم تنسيق مبدئي يعادل مخرجات \fIdate\fP(1). التنسيق المبدئي متاح في \fBPROCINFO["strftime"]\fP. انظر مواصفات دالة \fBstrftime()\fP في ISO C لمعرفة تحويلات التنسيق المضمون توافرها. .TP \fBsystime()\fP تُعيد وقت اليوم الحالي كعدد الثواني منذ حقبة (1970\-01\-01 00:00:00 UTC على أنظمة \*(PX). .SS "دوال معالجة البتات" يوفر \fIGawk\fP دوال معالجة البتات التالية. وتعمل عن طريق تحويل قيم الفاصلة العائمة مزدوجة الدقة إلى أعداد صحيحة من نوع \fBuintmax_t\fP، ثم تُجرى العملية، وتُحول النتيجة مرة أخرى إلى فاصلة عائمة. يؤدي تمرير معاملات سالبة إلى أي من هذه الدوال إلى حدوث خطأ فادح. .PP الدوال هي: .TP "\w'\fBrshift(\fIval\fB, \fIcount\fB)\fR'u+2n" \fBand(\fP\fIv1\fP\fB, \fP\fIv2 \fP[, ...]\fB)\fP تُعيد نتيجة عملية AND الثنائية (bitwise) للقيم المقدمة في قائمة المعاملات. يجب تقديم اثنين على الأقل. .TP \fBcompl(\fP\fIval\fP\fB)\fP تُعيد المتمم الثنائي (bitwise complement) لـ \fIval\fP. .TP \fBlshift(\fP\fIval\fP\fB, \fP\fIcount\fP\fB)\fP تُعيد قيمة \fIval\fP، بعد إزاحتها لليسار بمقدار \fIcount\fP من البتات. .TP \fBor(\fP\fIv1\fP\fB, \fP\fIv2 \fP[, ...]\fB)\fP تُعيد نتيجة عملية OR الثنائية للقيم المقدمة في قائمة المعاملات. يجب تقديم اثنين على الأقل. .TP \fBrshift(\fP\fIval\fP\fB, \fP\fIcount\fP\fB)\fP تُعيد قيمة \fIval\fP، بعد إزاحتها لليمين بمقدار \fIcount\fP من البتات. .TP \fBxor(\fP\fIv1\fP\fB, \fP\fIv2 \fP[, ...]\fB)\fP تُعيد نتيجة عملية XOR الثنائية للقيم المقدمة في قائمة المعاملات. يجب تقديم اثنين على الأقل. .SS "دوال الأنواع" توفر الدوال التالية معلومات متعلقة بالأنواع حول معاملاتها. .TP \w'\fBisarray(\fIx\fB)\fR'u+1n \fBisarray(\fP\fIx\fP\fB)\fP تُعيد صحيحًا (true) إذا كان \fIx\fP مصفوفة، وخاطئًا (false) خلاف ذلك. .TP \fBtypeof(\fP\fIx\fP\fB)\fP تُعيد سلسلة نصية تشير إلى نوع \fIx\fP. ستكون السلسلة واحدة من \fB"array"\fP، أو \fB"number"\fP، أو \fB"regexp"\fP، أو \fB"string"\fP، أو \fB"strnum"\fP، أو \fB"unassigned"\fP، أو \fB"untyped"\fP. .SS "دوال التدويل" يمكن استخدام الدوال التالية من داخل برنامج AWK لترجمة السلاسل النصية أثناء وقت التشغيل. للحصول على التفاصيل الكاملة، انظر \fIhttps://www.gnu.org/software/gawk/manual/html_node/I18N\-Functions.html#I18N\-Functions\fP. .TP \fBbindtextdomain(\fP\fIالدليل \fP[\fB, \fP\fIالنطاق\fP]\fB)\fP تحدد الدليل الذي يبحث فيه \fIgawk\fP عن ملفات \fB\&.gmo\fP، في حال لم توضع أو تعذر وضعها في المواقع "القياسية". وتُعيد الدليل الذي "رُبط" به \fIالنطاق\fP. .sp 0.5 \fIالنطاق\fP المبدئي هو قيمة \fBTEXTDOMAIN\fP. إذا كان \fIالدليل\fP سلسلة فارغة (\fB""\fP)، فإن \fBbindtextdomain()\fP تعيد الربط الحالي لـ \fIالنطاق\fP المعطى. .TP \fBdcgettext(\fP\fIالسلسلة \fP[\fB, \fP\fIالنطاق \fP[\fB, \fP\fIالفئة\fP]]\fB)\fP تُعيد ترجمة \fIالسلسلة\fP في نطاق النص \fIالنطاق\fP لفئة المحلية \fIالفئة\fP. القيمة المبدئية لـ \fIالنطاق\fP هي القيمة الحالية لـ \fBTEXTDOMAIN\fP. والقيمة المبدئية لـ \fIالفئة\fP هي \fB"LC_MESSAGES"\fP. .TP \fBdcngettext(\fP\fIسلسلة1\fP\fB, \fP\fIسلسلة2\fP\fB, \fP\fIالعدد \fP[\fB, \fP\fIالنطاق \fP[\fB, \fP\fIالفئة\fP]]\fB)\fP تُعيد صيغة الجمع المستخدمة لـ \fIالعدد\fP من ترجمة \fIسلسلة1\fP و \fIسلسلة2\fP في نطاق النص \fIالنطاق\fP لفئة المحلية \fIالفئة\fP. القيمة المبدئية لـ \fIالنطاق\fP هي القيمة الحالية لـ \fBTEXTDOMAIN\fP. والقيمة المبدئية لـ \fIالفئة\fP هي \fB"LC_MESSAGES"\fP. .SS "الدوال ذات القيم المنطقية" يمكنك إنشاء قيم خاصة من النوع المنطقي (Boolean)؛ انظر الدليل لمعرفة كيف تعمل ولماذا هي موجودة. .TP \fBmkbool(\fP\fIتعبير\^\fP\fB)\fP بناءً على القيمة المنطقية لـ \fIتعبير\fP، تُعيد إما قيمة صواب أو قيمة خطأ. قيم الصواب لها القيمة العددية واحد، وقيم الخطأ لها القيمة العددية صفر. .SH "دوال معرفة من قبل المستخدم" تُعرف الدوال في \*(AK كما يلي: .PP .RS \fBfunction \fP\fIالاسم\fP\fB(\fP\fIقائمة المعاملات\fP\fB) { \fP\fIالعبارات \fP\fB}\fP .RE .PP تُنَفَّذ الدوال عند استدعائها من داخل تعبيرات في الأنماط أو الإجراءات. تُستخدم المعاملات الفعلية المزودة في استدعاء الدالة لتمثيل المعاملات الرسمية المعلنة في الدالة. تُمرر المصفوفات بالمرجع، بينما تُمرر المتغيرات الأخرى بالقيمة. .PP تُعلن المتغيرات المحلية كمعاملات إضافية في قائمة المعاملات. جرى العرف على فصل المتغيرات المحلية عن المعاملات الحقيقية بمسافات إضافية في قائمة المعاملات. على سبيل المثال: .PP .RS .nf \fBfunction f(p, q, a, b) # a و b محليان { \&.\|.\|. }\fP \fB/abc/ { .\|.\|.\& ; f(1, 2) ; .\|.\|.\& }\fP .fi .RE .PP يجب أن تتبع القوس اليسرى في استدعاء الدالة اسم الدالة مباشرة، دون أي مسافات بيضاء فاصلة. لا ينطبق هذا القيد على الدوال المدمجة المذكورة أعلاه. .PP قد تستدعي الدوال بعضها البعض وقد تكون عاودية (recursive). تُهَيَّأ معاملات الدوال المستخدمة كمتغيرات محلية إلى سلسلة فارغة والعدد صفر عند استدعاء الدالة. .PP استخدم \fBreturn\fP\fI تعبير\fP لإعادة قيمة من الدالة. تكون القيمة المعادة غير محددة إذا لم تُزود قيمة، أو إذا انتهت الدالة بالوصول إلى نهايتها. .PP يمكن استدعاء الدوال بشكل غير مباشر. للقيام بذلك، عين اسم الدالة المراد استدعاؤها، كسلسلة نصية، لمتغير. ثم استخدم المتغير كما لو كان اسم دالة، مسبوقًا بعلامة \fB@\fP، كما يلي: .RS .nf \fBfunction myfunc() { print "استدعيت myfunc" \&.\|.\|. }\fP \fB{ .\|.\|. the_func = "myfunc" @the_func() # استدعاء myfunc عبر the_func .\|.\|. }\fP .fi .RE .PP إذا زُوِّد الخيار \fB\-\^\-lint\fP، فسيحذر \fIgawk\fP من استدعاءات الدوال غير المعرفة في وقت التحليل، بدلاً من وقت التشغيل. استدعاء دالة غير معرفة في وقت التشغيل هو خطأ فادح. .SH "تحميل دوال جديدة ديناميكيًا" يمكنك إضافة دوال جديدة مكتوبة بلغة C أو ++C ديناميكيًا إلى مترجم \fIgawk\fP قيد التشغيل باستخدام عبارة \fB@load\fP. التفاصيل الكاملة خارج نطاق صفحة الدليل هذه؛ انظر \fIhttps://www.gnu.org/software/gawk/manual/html_node/Dynamic\-Extensions.html#Dynamic\-Extensions\fP. .SH إشارات يقبل مِدقاق \fIgawk\fP إشارتين. تؤدي \fBSIGUSR1\fP إلى تفريغ تشكيلة وكومة استدعاء الدوال إلى ملف التشكيلة، وهو إما \fBawkprof.out\fP، أو أي ملف سُمي باستخدام خيار \fB\-\^\-profile\fP. ثم يستمر في العمل. وتؤدي \fBSIGHUP\fP إلى قيام \fIgawk\fP بتفريغ التشكيلة وكومة استدعاء الدوال ثم الخروج. .SH التدويل ثوابت السلاسل النصية هي تسلسلات من المحارف المحاطة بعلامات اقتباس مزدوجة. في البيئات غير الناطقة بالإنجليزية، يمكن تمييز السلاسل في برنامج \*(AK على أنها تتطلب ترجمة إلى اللغة الطبيعية المحلية. تُميز هذه السلاسل في برنامج \*(AK بشرطة سفلية بادئة ("_"). على سبيل المثال، .sp .RS \fBgawk 'BEGIN { print "hello, world" }'\fP .RE .sp تطبع دائماً \fBhello, world\fP. لكن، .sp .RS \fBgawk 'BEGIN { print _"hello, world" }'\fP .RE .sp قد تطبع \fBbonjour, monde\fP في فرنسا. انظر \fIhttps://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization\fP للتعرف على الخطوات المتبعة لإنتاج وتشغيل برنامج \*(AK قابل للتوطين. .SH "امتدادات GNU" يحتوي \fIGawk\fP على عدد كبير جدًا من الامتدادات لـ \*(PX \fIawk\fP. وهي موصوفة في \fIhttps://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html\fP. يمكن تعطيل جميع الامتدادات عن طريق استدعاء \fIgawk\fP مع الخيارات \fB\-\^\-traditional\fP أو \fB\-\^\-posix\fP. .SH "متغيرات البيئة" يمكن استخدام متغير البيئة \fBAWKPATH\fP لتوفير قائمة بالأدلة التي يبحث فيها \fIgawk\fP عن الملفات المسماة عبر خيارات \fB\-f\fP و \fB\-\^\-file\fP و \fB\-i\fP و \fB\-\^\-include\fP، وتوجيهات \fB@include\fP و \fB@nsinclude\fP. إذا فشل البحث الأولي، يُبحث في المسار مرة أخرى بعد إضافة \fB\&.awk\fP إلى اسم الملف. .PP يمكن استخدام متغير البيئة \fBAWKLIBPATH\fP لتوفير قائمة بالأدلة التي يبحث فيها \fIgawk\fP عن الملفات المسماة عبر خيارات \fB\-l\fP و \fB\-\^\-load\fP. .PP يحدد متغير البيئة \fBGAWK_PERSIST_FILE\fP، في حال وجوده، ملفًا لاستخدامه كمخزن خلفي للذاكرة المستمرة. انظر \*(EP للحصول على التفاصيل. .PP يمكن استخدام متغير البيئة \fBGAWK_READ_TIMEOUT\fP لتحديد مهلة بالملي ثانية لقراءة المدخلات من طرفية أو أنبوب أو اتصال ثنائي الاتجاه بما في ذلك المقابس. .PP للاتصال بمضيف بعيد عبر مقبس، يتحكم \fBGAWK_SOCK_RETRIES\fP في عدد محاولات إعادة الاتصال، و \fBGAWK_MSEC_SLEEP\fP في الفاصل الزمني بين المحاولات. الفاصل الزمني بالملي ثانية. في الأنظمة التي لا تدعم \fIusleep\fP(3)، تُقَرَّب القيمة إلى أقرب عدد صحيح من الثواني. .PP إذا وُجد \fBPOSIXLY_CORRECT\fP في البيئة، فسيقوم \fIgawk\fP بالتصرف تمامًا كما لو حُدِّد \fB\-\^\-posix\fP على سطر الأوامر. إذا حُدِّد \fB\-\^\-lint\fP، فسيصدر \fIgawk\fP رسالة تحذير بهذا الشأن. .ig .PP Set \fBGAWK_NO_MPFR_WARN\fR in the environment to silence the warning about MPFR mode being deprecated. .. .SH "حالة الخروج" إذا استُخدمت عبارة \fBexit\fP مع قيمة، فإن \fIgawk\fP يخرج بالقيمة العددية المعطاة له. .PP خلاف ذلك، إذا لم تكن هناك مشاكل أثناء التنفيذ، يخرج \fIgawk\fP بالقيمة الثابتة C لـ \fBEXIT_SUCCESS\fP. عادة ما تكون هذه القيمة صفرًا. .PP إذا حدث خطأ، يخرج \fIgawk\fP بالقيمة الثابتة C لـ \fBEXIT_FAILURE\fP. عادة ما تكون هذه القيمة واحدًا. .PP إذا خرج \fIgawk\fP بسبب خطأ فادح، تكون حالة الخروج 2. في الأنظمة غير المتوافقة مع POSIX، قد تُعين هذه القيمة إلى \fBEXIT_FAILURE\fP. .SH "معلومات الإصدار" توثق صفحة الدليل هذه \fIgawk\fP، الإصدار 5.4. .SH المؤلفون صُممت ونُفذت النسخة الأصلية من \*(UX \fIawk\fP بواسطة Alfred Aho، و Peter Weinberger، و Brian Kernighan من مختبرات Bell. المداوم الحالي هو Ozan Yigit. يشارك Brian Kernighan أحياناً في تطويره. .PP كتب Paul Rubin و Jay Fenlason، من مؤسسة البرمجيات الحرة، \fIgawk\fP، ليكون متوافقاً مع النسخة الأصلية من \fIawk\fP الموزعة في الإصدار السابع من \*(UX. ساهم John Woods بعدد من إصلاحات العلل. David Trueman، بمساهمات من Arnold Robbins، جعل \fIgawk\fP متوافقاً مع النسخة الجديدة من \*(UX \fIawk\fP. المداوم الحالي هو Arnold Robbins. .PP انظر \*(EP للحصول على قائمة كاملة بالمساهمين في \fIgawk\fP وتوثيقه. .PP انظر ملف \fBREADME\fP في توزيعة \fIgawk\fP للحصول على معلومات محدثة عن المداومين والمنافذ المدعومة حالياً. .SH "تقارير العلل والأسئلة" إذا وجدت علة في \fIgawk\fP، فيرجى استخدام برنامج \fIgawkbug\fP(1) للإبلاغ عنها. .PP تتوفر تعليمات كاملة للإبلاغ عن علة في \fIhttps://www.gnu.org/software/gawk/manual/html_node/Bugs.html\fP. \fIيرجى\fP قراءة واتباع التعليمات المعطاة هناك بعناية. سيجعل هذا الإبلاغ عن العلل وحلها أسهل بكثير لكل المعنيين. حقاً. .PP من ناحية أخرى، إذا كان لديك سؤال حول كيفية إنجاز مهمة معينة باستخدام \fIawk\fP أو \fIgawk\fP، فأرسل بريداً إلكترونياً إلى \fBhelp\-gawk@gnu.org\fP مع طلبك للمساعدة. .SH العلل خيار \fB\-F\fP ليس ضرورياً بالنظر إلى ميزة تعيين المتغيرات من سطر الأوامر؛ وقد بقي فقط للتوافق مع الإصدارات السابقة. .PP صفحة الدليل هذه طويلة جداً؛ \fIgawk\fP يحتوي على ميزات كثيرة جداً. .SH "انظر أيضًا" \fIegrep\fP(1)، و \fIsed\fP(1)، و \fIgawkbug\fP(1)، و \fIprintf\fP(3)، و \fIstrftime\fP(3). .PP \fIلغة البرمجة AWK\fP، الطبعة الثانية، Alfred V.\& Aho، و Brian W.\& Kernighan، و Peter J.\& Weinberger، منشورات Addison\-Wesley، 2023. رقم 9\-780138\-269722 ISBN. .PP \*(EP، الإصدار 5.3، المرفق مع مصدر \fIgawk\fP. النسخة الحالية من هذا المستند متاحة على الإنترنت في \fIhttps://www.gnu.org/software/gawk/manual\fP. .PP توثيق GNU \fBgettext\fP، المتاح على الإنترنت في \fIhttps://www.gnu.org/software/gettext\fP. .SH أمثلة .nf اطبع أسماء الدخول لجميع المستخدمين وفرزها: \fB BEGIN { FS = ":" } { print $1 | "sort" }\fP عد الأسطر في ملف: \fB { nlines++ } END { print nlines }\fP ألحِق بكل سطر رقمه في الملف: \fB { print FNR, $0 }\fP سلسل ورقّم الأسطر (تنويع على ذات الفكرة): \fB { print NR, $0 }\fP شغّل أمراً خارجياً لأسطر بيانات معينة: \fB tail \-f access_log | awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'\fP .fi .ig .SH ACKNOWLEDGEMENTS Brian Kernighan provided valuable assistance during testing and debugging. We thank him. .. .SH "أذونات النسخ" حقوق النشر \(co 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.) .PP مُنح الإذن بصنع وتوزيع نسخ حرفية من صفحة الدليل هذه بشرط الحفاظ على إشعار حقوق النشر وإشعار الإذن هذا في جميع النسخ. .ig Permission is granted to process this file through troff and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual page). .. .PP مُنح الإذن بنسخ وتوزيع نسخ معدلة من صفحة الدليل هذه تحت شروط النسخ الحرفي، بشرط توزيع العمل المشتق الناتج بالكامل تحت شروط إشعار إذن مطابق لهذا الإشعار. .PP مُنح الإذن بنسخ وتوزيع ترجمات صفحة الدليل هذه إلى لغة أخرى، وفقاً للشروط المذكورة أعلاه للنسخ المعدلة، باستثناء أن إشعار الإذن هذا قد يُذكر في ترجمة معتمدة من قِبل المؤسسة. .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .