تعلم قيادة لينكس - gawk

اسم

gawk - نمط مسح وتجهيز اللغة

ملخص

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

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

وصف

Gawk هو تنفيذ مشروع جنو للغة برمجة AWK. يتوافق مع تعريف اللغة في معيار POSIX 1003.2 لغة القيادة والمرافق. يعتمد هذا الإصدار بدوره على الوصف في لغة البرمجة AWK ، من قبل Aho ، Kernighan ، و Weinberger ، مع الميزات الإضافية الموجودة في إصدار System V Release 4 من UNIX awk . كما يوفر Gawk ملحقات أحدث مختبرات بيل مختبرات ، وعدد من ملحقات GNU محددة.

Pgawk هو النسخة التنميط من gawk . إنه متطابق في كل طريقة للتثاؤم ، فيما عدا أن البرامج تعمل ببطء أكثر ، وأنها تنتج ملفًا شخصيًا للتنفيذ تلقائيًا في الملف awkprof.out عند الانتهاء. انظر الخيار --profile ، أدناه.

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

تنسيق الخيار

قد تكون خيارات Gawk إما خيارات POSIX حرفًا تقليدية ، أو خيارات طويلة من نمط GNU. تبدأ خيارات POSIX بـ `` - '' مفرد ، بينما تبدأ الخيارات الطويلة بـ `` - ''. يتم توفير خيارات طويلة لكل من ميزات GNU الخاصة وميزات POSIX.

بعد معيار POSIX ، يتم توفير خيارات gawk- محددة عبر الوسيطات إلى خيار -W . قد يتم توفير خيارات متعددة -W كل خيار -W له خيار طويل مناظرة ، كما هو مفصل أدناه. يتم ربط الوسيطات للخيارات الطويلة مع الخيار بواسطة علامة = ، مع عدم وجود مسافات متداخلة ، أو قد يتم توفيرها في وسيطة سطر الأوامر التالية. قد يتم اختصار الخيارات الطويلة ، طالما أن الاختصار يبقى فريدًا.

خيارات

يقبل Gawk الخيارات التالية ، مرتبة أبجديًا.

-F fs

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

-v var = val

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

-f ملف البرنامج

- ملف البرنامج - ملف قراءة البرنامج AWK من ملف برنامج الملف ، بدلا من وسيطة سطر الأوامر الأولى. يمكن استخدام خيارات متعددة (أو --file ).

-mf NNN

-mr NNN تعيين حدود الذاكرة المختلفة إلى قيمة NNN . تعيّن العلامة f أقصى عدد للحقول ، ويضع علم r الحجم الأقصى للسجل. هاتان العلامتان وعلامة -m هما من النسخة البحثية لمختبر Bell لـ UNIX awk . يتم تجاهلها من قبل gawk ، بما أن gawk ليس لها حدود محددة مسبقًا.

-W متوافق

-W التقليدية

--compat

- تشغيل تقليدي في وضع التوافق . في وضع التوافق ، يتصرف gawk بطريقة مشابهة لـ UNIX awk ؛ لا يتم التعرف على أي من ملحقات GNU الخاصة. يفضل استخدام -traditional على الأشكال الأخرى من هذا الخيار. انظر إضافات GNU ، أدناه ، لمزيد من المعلومات.

دبليو الحقوق المتروكة

دبليو حقوق التأليف والنشر

--copyleft

- ccopyright اطبع النسخة القصيرة لرسالة معلومات حقوق نشر غنو على المخرجات القياسية والخروج بنجاح.

متغيرات تفريغ -W [ = file ]

--dump-variables [ = file ] طباعة قائمة مرتبة للمتغيرات العامة وأنواعها والقيم النهائية الخاصة بها. إذا لم يتم توفير أي ملف ، فسيستخدم gawk ملفًا باسم awkvars.out في الدليل الحالي.

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

-W مساعدة

-W الاستخدام

--مساعدة

--usage طباعة ملخص قصير نسبيا من الخيارات المتاحة على الإخراج القياسي. (وفقًا لمعايير جنو للكود ، فإن هذه الخيارات تتسبب في خروج ناجح وفوري.)

-و الوبر [ = مميت ]

- lint [ = fatal ] تقديم تحذيرات حول التركيبات المشبوهة أو غير المحمولة إلى تطبيقات otherAWK. مع حجة اختيارية من قاتلة ، تصبح تحذيرات الوبر أخطاء قاتلة. قد يكون هذا جذريًا ، لكن استخدامه سيشجع بالتأكيد تطوير برامج AWK الأنظف.

-W الوبر القديم

- lint-old تقديم تحذيرات حول التركيبات غير المحمولة إلى الإصدار الأصلي من Unix awk .

-W gen-po

--gen-po قم بفحص و تحليل برنامج AWK ، وقم بإنشاء ملف GNU .po القياسي على الإخراج القياسي مع إدخالات لجميع السلاسل القابلة للترجمة في البرنامج. البرنامج نفسه لم ينفذ. راجع توزيع gnu gettext لمزيد من المعلومات حول ملفات .po .

-W البيانات غير العشرية

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

-و posix

--posix يؤدي هذا إلى تشغيل وضع التوافق مع القيود الإضافية التالية:

*

لا يتم التعرف على تسلسلات الهروب.

*

تعمل المساحة وعلامة التبويب فقط كفواصل المجال عند تعيين FS على مسافة واحدة ، بينما لا يعمل السطر الجديد.

*

لا يمكنك متابعة الخطوط بعد ؟ و :.

*

لم يتم التعرف على الدالة sync func الخاصة بوظيفة الكلمة الرئيسية.

*

لا يمكن استخدام المشغلين ** و ** = بدلاً من ^ و ^ = .

*

الدالة fflush () غير متوفرة.

-W profile [ = prof_file ]

--profile [ = prof_file ] إرسال البيانات التعريفية إلى prof_file . الافتراضي هو awkprof.out . عندما يتم تشغيله باستخدام gawk ، فإن الملف الشخصي هو مجرد نسخة "مطبوعة تمامًا" من البرنامج. عند التشغيل باستخدام pgawk ، يحتوي ملف التعريف على عدد التنفيذ لكل عبارة في البرنامج في الهامش الأيسر وتعداد المكالمة الوظيفية لكل وظيفة معرفة من قبل المستخدم.

-w إعادة الفاصل

--re-interval تمكين استخدام تعبيرات الفواصل الزمنية في مطابقة التعبير العادي (انظر التعبير العادي ، أدناه). لم تكن التعبيرات الفاصلة متاحة بشكل تقليدي في لغة AWK. وأضاف معيار POSIX لهم ، لجعل awk و egrep تتفق مع بعضها البعض. ومع ذلك ، من المحتمل أن يؤدي استخدامهم إلى كسر برامج AWK القديمة ، لذا لا يقوم gawk بتوفيرها إلا إذا تم طلبها باستخدام هذا الخيار ، أو عند تحديد --posix .

-W مصدر البرنامج النص

- نص البرنامج المصدر - استخدام نص البرنامج ككود المصدر لبرنامج AWK. يسمح هذا الخيار بالخلط السهل بين وظائف المكتبة (يتم استخدامها من خلال -f و -file options) مع شفرة المصدر المدخلة على سطر الأوامر. وهو مخصص في المقام الأول لبرامج AWK المتوسطة إلى الكبيرة المستخدمة في نصوص القشرة.

-W الإصدار

- نسخ معلومات إصدار الطباعة لهذه النسخة الخاصة من gawk على الإخراج القياسي. يفيد ذلك بشكل أساسي لمعرفة ما إذا كانت النسخة الحالية من gawk على النظام الخاص بك محدثة فيما يتعلق بما تقوم مؤسسة Free Software Foundation بتوزيعه. هذا مفيد أيضًا عند الإبلاغ عن الأخطاء. (وفقًا لمعايير جنو للكود ، فإن هذه الخيارات تتسبب في خروج ناجح وفوري.)

- الإشارة نهاية الخيارات. وهذا مفيد للسماح بمزيد من الحجج لبرنامج AWK نفسه لبدء "` - ". هذا بشكل أساسي من أجل التناسق مع اتفاقية تحليل الوسيطة المستخدمة من قبل معظم برامج POSIX الأخرى.

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

AWK برنامج التنفيذ

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

النقش { عبارات الإجراء }

اسم الوظيفة ( قائمة المعلمات ) { عبارات }

يقوم Gawk أولاً بقراءة مصدر البرنامج من ملف ( ملفات ) البرنامج إذا تم تحديده ، من الوسيطات إلى - المصدر ، أو من أول وسيطة غير اختيارية في سطر الأوامر. يمكن استخدام -f و -source عدة مرات في سطر الأوامر. يقرأ Gawk نص البرنامج كما لو كانت جميع نصوص ملفات البرنامج وقواعد سطر الأوامر متسلسلة معًا. وهذا مفيد لبناء مكتبات وظائف AWK ، دون الحاجة إلى تضمينها في كل برنامج AWK جديد يستخدمها. كما يوفر القدرة على خلط وظائف المكتبة مع برامج سطر الأوامر.

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

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

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

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

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

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

المتغيرات والسجلات والحقول

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

تسجيل

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

مجالات

عند قراءة كل سجل إدخال ، يقوم gawk بتقسيم السجل إلى حقول ، باستخدام قيمة متغير FS باعتباره فاصل الحقل. إذا كانت FS هي حرف واحد ، فسيتم فصل الحقول عن طريق هذا الحرف. إذا كانت FS هي السلسلة الخالية ، فحينئذٍ يصبح كل حرف فردي عبارة عن حقل منفصل. خلاف ذلك ، من المتوقع أن تكون الخدمة الثابتة تعبيرًا عاديًا تمامًا. في الحالة الخاصة التي تكون فيها FS هي مساحة واحدة ، يتم فصل الحقول عن طريق تشغيل المسافات و / أو علامات الجدولة و / أو الخطوط الجديدة. (ولكن انظر مناقشة --posix ، أدناه). ملاحظة: تؤثر قيمة IGNORECASE (انظر أدناه) أيضًا على كيفية تقسيم الحقول عندما تكون FS تعبيرًا عاديًا ، وكيف يتم فصل السجلات عندما يكون RS تعبيرًا عاديًا.

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

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

ن = 5
اطبع $ n

يطبع الحقل الخامس في سجل الإدخال.

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

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

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

متغيرات مدمجة

المتغيرات المضمنة في Gawk هي:

ARGC

عدد وسيطات سطر الأوامر (لا يتضمن خيارات ل gawk أو مصدر البرنامج).

ARGIND

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

ARGV

مجموعة من الحجج سطر الأوامر. يتم فهرسة المصفوفة من 0 إلى ARGC - 1. تغيير محتويات ARGV ديناميكيًا يمكن التحكم في الملفات المستخدمة للبيانات.

BINMODE

في أنظمة غير POSIX ، يحدد استخدام الوضع '' ثنائي '' لكل ملف الإدخال / الإخراج. القيم الرقمية 1 أو 2 أو 3 ، تحديد أن ملفات الإدخال أو ملفات الإخراج أو كافة الملفات ، على التوالي ، يجب أن تستخدم الإدخال / الإخراج الثنائي. تحدد قيم السلسلة "r" أو "w" أن ملفات الإدخال أو ملفات المخرجات ، على التوالي ، يجب أن تستخدم الإدخال / الإخراج الثنائي. تحدد قيم سلسلة "rw" أو "wr" أن جميع الملفات يجب أن تستخدم ثنائية I / O. يتم معاملة أي قيمة سلسلة أخرى كـ "rw" ولكن ينشئ رسالة تحذير.

CONVFMT

تنسيق التحويل للأرقام ، "٪ .6g" ، بشكل افتراضي.

ENVIRON

مصفوفة تحتوي على قيم البيئة الحالية. يتم فهرسة المصفوفة من خلال متغيرات البيئة ، كل عنصر هو قيمة هذا المتغير (على سبيل المثال ، قد يكون ENVIRON ["HOME"] / home / arnold ). لا يؤثر تغيير هذا الصفيف على البيئة التي تشاهدها البرامج التي تفرزها gawk عبر إعادة التوجيه أو وظيفة النظام () .

ERRNO

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

FIELDWIDTHS

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

اسم الملف

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

FNR

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

FS

فاصل حقل الإدخال ، مساحة افتراضياً. انظر الحقول ، أعلاه.

IGNORECASE

يتحكم في حساسية الحالة لجميع عمليات التعبير العادي والصفري. إذا كانت IGNORECASE تحتوي على قيمة غير صفرية ، ثم مقارنات السلسلة ومطابقة النمط في القواعد ، تقسيم المجال مع FS ، وفصل السجل بـ RS ، ومطابقة التعبير العادي مع ~ و ! ~ ، و gensub () ، gsub () ، index () و match () و split () و sub () الدالات المضمنة كافة تجاهل حالة عند إجراء عمليات التعبير العادية. ملاحظة: لا يتأثر ترتيب الصفيف ، ولا هي الدالة asort () .

وهكذا ، إذا لم تكن IGNORECASE تساوي الصفر ، / aB / تطابق جميع السلاسل "ab" و "aB" و "Ab" و "AB" . كما هو الحال مع جميع المتغيرات AWK ، القيمة الأولية لـ IGNORECASE هي صفر ، لذلك تكون جميع عمليات التعبير العادي والعمليات الحسابية لحالة الأحرف. تحت يونيكس ، يتم استخدام مجموعة الأحرف الكاملة ISO 8859-1 Latin-1 عند تجاهل الحالة.

لينت

يوفر تحكمًا ديناميكيًا في الخيار -lint من داخل برنامج AWK. عندما يكون صحيحا ، يطبع البياض تحذيرات الوبر. عندما خاطئة ، لا. عند تعيين قيمة السلسلة "قاتلة" ، تصبح تحذيرات الوبر أخطاء فادحة ، تمامًا مثل --lint = fatal . أي قيمة حقيقية أخرى تطبع تحذيرات فقط.

NF

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

NR

العدد الإجمالي لسجلات الإدخال التي تمت رؤيتها حتى الآن.

OFMT

تنسيق الإخراج للأرقام ، "٪ .6g" ، بشكل افتراضي.

OFS

فاصل حقل الإخراج ، مساحة افتراضياً.

ORS

فاصل سجل الإخراج ، بشكل افتراضي سطر جديد.

PROCINFO

توفر عناصر هذه المجموعة الوصول إلى المعلومات حول برنامج AWK قيد التشغيل. في بعض الأنظمة ، قد تكون هناك عناصر في الصفيف ، "group1" عبر "group n " لبعض n ، وهو عدد المجموعات التكميلية التي تحتوي عليها العملية. استخدم عامل التشغيل لاختبار هذه العناصر. العناصر التالية مضمونة لتكون متاحة:

PROCINFO [ "EGID"]

قيمة استدعاء النظام getegid (2).

PROCINFO [ "euid"]

قيمة استدعاء النظام geteuid (2).

PROCINFO [ "FS"]

"FS" إذا كان تقسيم الحقل مع FS قيد التنفيذ أو "FIELDWIDTHS" إذا كان تقسيم الحقل مع FIELDWIDTHS ساري المفعول.

PROCINFO [ "دائرة المخابرات العامة"]

قيمة استدعاء النظام getgid (2).

PROCINFO [ "pgrpid"]

معرف مجموعة العملية الخاصة بالعملية الحالية.

PROCINFO [ "معرف المنتج"]

معرف العملية الخاص بالعملية الحالية.

PROCINFO [ "ppid"]

معرف العملية الأصل للعملية الحالية.

PROCINFO [ "رمز المستخدم"]

قيمة استدعاء النظام getuid (2).

RS

فاصل سجل الإدخال ، افتراضيًا سطر جديد.

RT

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

RSTART

فهرس الحرف الأول يقابله تطابق () ؛ 0 في حالة عدم وجود تطابق. (وهذا يعني أن مؤشرات الشخصيات تبدأ من واحد.)

RLENGTH

طول السلسلة المطابقة بواسطة match () ؛ -1 إذا لم تكن هناك مباراة.

SUBSEP

الحرف المستخدم للفصل بين عدة علامات فرعية في عناصر الصفيف ، بشكل افتراضي "\ 034" .

TEXTDOMAIN

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

المصفوفات

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

أنا = "أ" ؛ j = "B" k = "C"
x [i، j، k] = "hello، world \ n"

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

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

إذا كانت صفيف (val in array) طباعة [val]

إذا كان الصفيف يحتوي على العديد من وحدات الالتقاط ، استخدم (i، j) في الصفيف .

يمكن أيضًا استخدام البنية المضمنة في حلقة for للتكرار على جميع عناصر الصفيف.

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

الكتابة المتغيرة والتحويل

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

لفرض متغير ليتم التعامل معه كرقم ، أضف 0 إليه ؛ لإجباره على أن يعامل كسلسلة ، سلسلته مع سلسلة فارغة.

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

CONVFMT = "٪ 2.2f" a = 12 b = a ""

المتغير b له قيمة سلسلة من "12" وليس "12.00" .

يقوم Gawk بإجراء مقارنات على النحو التالي: إذا كان هناك متغيرين رقميين ، تتم مقارنةهما عدديًا. إذا كانت قيمة واحدة رقمية والأخرى تحتوي على قيمة سلسلة وهي عبارة عن "سلسلة رقمية" ، "ثم يتم إجراء المقارنات أيضًا عدديًا. خلاف ذلك ، يتم تحويل القيمة الرقمية إلى سلسلة ويتم إجراء مقارنة سلسلة. تتم مقارنة سلسلتين ، بالطبع ، كسلسلة. لاحظ أن معيار POSIX يطبق مفهوم "السلسلة الرقمية" في كل مكان ، حتى على ثوابت السلسلة. ومع ذلك ، فمن الواضح أن هذا غير صحيح ، ولا تفعل gawk هذا. (لحسن الحظ ، تم إصلاح هذا في الإصدار التالي من المعيار.)

لاحظ أن ثوابت السلسلة ، مثل "57" ، ليست سلاسل رقمية ، فهي ثوابت سلسلة. لا تنطبق فكرة "السلسلة الرقمية" إلا على الحقول ومدخلات خط الطيران و FILENAME وعناصر ARGV وعناصر ENVIRON وعناصر صفيف تم إنشاؤه بواسطة split () وهي سلاسل رقمية. الفكرة الأساسية هي أن إدخال المستخدم ، وإدخال المستخدم فقط ، التي تبدو رقمية ، ينبغي أن يعامل بهذه الطريقة.

لدى المتغيرات غير مهيأة القيمة الرقمية 0 وقيمة السلسلة "" (سلسلة فارغة أو فارغة).

الثوابت الثماني والسادسة

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

ثوابت السلسلة

ثوابت السلسلة في AWK هي عبارة عن سلاسل من الحروف بين علامات الاقتباس المزدوجة ( " ). داخل السلاسل ، يتم التعرف على تسلسلات هروب معينة ، كما هو الحال في C. هذه هي:

\\

حرف مائل عكسي.

الحرف "تنبيه"؛ عادة ما يكون حرف ASCII BEL.

مسافة للخلف.

\F

نموذج تغذية.

\ ن

خط جديد.

\ ص

إرجاع.

\ ر

مساحة أفقية.

\الخامس

علامة التبويب العمودية.

\ x عدد ست عشرية

الحرف الذي يمثله سلسلة من الأرقام السداسية العشرية التالية \ x . كما هو الحال في ANSIC ، تعتبر جميع الأرقام الست عشرية التالية جزءًا من تسلسل الهروب. (يجب أن تخبرنا هذه الميزة بشيء عن تصميم اللغة من قبل اللجنة.) على سبيل المثال ، "\ x1B" هي حرف ASCIIESC (الهروب).

\ ddd

الحرف الذي يمثله التسلسل 1 أو 2 أو 3 أرقام من الأرقام الثمانية. على سبيل المثال ، "\ 033" هو الحرف ASCII ESC (الهروب).

\ ج

الحرف الحرفي ج .

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

في وضع التوافق ، يتم التعامل مع الأحرف الممثلة بتسلسل الهروب الثماني وعشريًا حرفياً عند استخدامها في ثوابت التعبير العادي. وبالتالي ، / a \ 52b / تعادل / a \ * b / .

الأنماط والإجراءات

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

{طباعة}

الذي يطبع السجل بأكمله.

تبدأ التعليقات بالحرف `` # ، وتستمر حتى نهاية السطر. يمكن استخدام خطوط فارغة لفصل العبارات. عادة ، ينتهي البيان بخط جديد ، ومع ذلك ، هذه ليست الحال بالنسبة للخطوط المنتهية في `` ، '، { ، } ؟ أو : أو && أو || . الأسطر التي تنتهي في القيام أو آخر أيضًا يتم تسجيل عباراتها تلقائيًا في السطر التالي. في حالات أخرى ، يمكن الاستمرار في سطر ما بإنهائه بـ "، وفي هذه الحالة سيتم تجاهل السطر الجديد.

قد يتم وضع عبارات متعددة على سطر واحد عن طريق فصلها مع `` ؛ ''. وينطبق هذا على كلٍّ من العبارات الموجودة في جزء الإجراء في زوج عمل التصرف (الحالة المعتادة) ، وعلى عبارات إجراء النمط نفسها.

أنماط - رسم

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

BEGIN END / نمط تعبير عادي / تعبير علائقي & نمط نمط || نمط نمط ؟ نمط : نمط ( نمط ) ! نمط pattern1 ، pattern2

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

للتعبير / الأنماط العادية ، يتم تنفيذ البيان المرتبط لكل سجل إدخال يطابق التعبير العادي. التعبيرات العادية هي نفسها كتلك الموجودة في egrep (1) ، ويتم تلخيصها أدناه.

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

The && ، || و ! المشغلين منطقية و ، منطقية أو ، و منطقية NOT ، على التوالي ، كما هو الحال في C. يقومون بتقييم ماس كهربائى ، كما هو الحال في C ، ويتم استخدامها لتجميع تعبيرات نمط بدائية أكثر. كما هو الحال في معظم اللغات ، يمكن استخدام الأقواس لتغيير ترتيب التقييم.

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

يسمى النمط pattern1 ، pattern2 للتعبير بنمط النطاق . فهو يطابق جميع سجلات الإدخال التي تبدأ بسجل يطابق النمط 1 ، ويستمر حتى يتطابق مع سجل يطابق النمط 2 ، شاملًا. لا يتحد مع أي نوع آخر من تعبير النمط.

التعبيرات العادية

التعبيرات العادية هي النوع الممتد الموجود في egrep . تتكون من شخصيات على النحو التالي:

ج

يتطابق مع غير الحرف الأولي c .

\ ج

يطابق الحرف الحرفي ج .

.

يطابق أي حرف بما في ذلك الخط الجديد.

^

يطابق بداية سلسلة.

$

يطابق نهاية سلسلة.

[ abc ... ]

قائمة الشخصيات ، تتطابق مع أي من الحروف abc ....

[^ abc ... ]

قائمة الشخصيات المنسوخة ، تتطابق مع أي حرف باستثناء حروف ....

r1 | R2

التناوب: تطابق إما r1 أو r2 .

r1r2

تسلسل: يطابق r1 ، ثم r2 .

ص +

تطابق واحد أو أكثر من ص .

ص *

يطابق الصفر أو أكثر ص .

ص ؟

يطابق الصفر أو واحد ص .

( ص )

التجمع: مباريات ص .

ص { ن }

ص { ن }

r { n ، m } يشير رقم واحد أو رقمين داخل الأقواس إلى تعبير فاصل . إذا كان هناك رقم واحد في الأقواس ، فإن التعبير العادي السابق r يتكرر n مرة. إذا كان هناك رقمين مفصولين بفاصلة ، يتكرر r n إلى n م . إذا كان هناك رقم واحد متبوعًا بفاصلة ، فسيتم تكرار r مرة واحدة على الأقل.

تكون تعبيرات الفواصل الزمنية متاحة فقط في حالة تحديد إما --pos أو - --interval في سطر الأوامر.

\ ص

يطابق السلسلة الفارغة في بداية الكلمة أو نهايتها.

يطابق السلسلة الفارغة داخل الكلمة.

\ <

يطابق السلسلة الفارغة في بداية الكلمة.

\>

يطابق السلسلة الفارغة في نهاية الكلمة.

\ ث

يتطابق مع أي حرف مكون من كلمة (حرف ، أو رقم ، أو شرطة سفلية).

\ W

يطابق أي حرف ليس مكونًا الكلمة.

\ '

يطابق السلسلة الفارغة في بداية المخزن المؤقت (سلسلة).

\ "

يطابق السلسلة الفارغة في نهاية المخزن المؤقت.

تسلسلات الهروب الصالحة في ثوابت السلسلة (انظر أدناه) صالحة أيضًا في التعبيرات العادية.

تعتبر فئات الأحرف ميزة جديدة يتم تقديمها في معيار POSIX. فئة الحرف هي تدوين خاص لوصف قوائم الأحرف التي لها سمة معينة ، ولكن عندما تختلف الأحرف الفعلية نفسها من بلد إلى آخر و / أو من مجموعة الأحرف إلى مجموعة الأحرف. على سبيل المثال ، يختلف مفهوم ما هو حرف أبجدي في الولايات المتحدة الأمريكية وفي فرنسا.

فئة الحرف صالحة فقط في تعبير عادي داخل أقواس قائمة الحروف. تتكون فئات الأحرف من [: ، كلمة أساسية تدل على الفئة ، و :] . فئات الحرف التي يحددها معيار POSIX هي:

[: alnum:]

أحرف أبجدية رقمية.

[:ألفا:]

الأحرف الأبجدية.

[: فارغة:]

الفضاء أو علامة التبويب الأحرف.

[: CNTRL:]

أحرف التحكم.

[: الرقم:]

الحروف الرقمية.

[:رسم بياني:]

الأحرف التي يمكن طباعتها ومرئية. (المساحة قابلة للطباعة ، ولكنها غير مرئية ، في حين أن a هو كلاهما.)

[:خفض:]

الأحرف الأبجدية ذات الأحرف الصغيرة.

[:طباعة:]

الأحرف القابلة للطباعة (الأحرف التي لا تكون أحرف التحكم.)

[: PUNCT:]

أحرف الترقيم (الأحرف غير الحرف ، أو الأرقام ، أو أحرف التحكم ، أو أحرف المسافات).

[:الفراغ:]

أحرف الفضاء (مثل المسافة ، وعلامة التبويب ، و formfeed ، على سبيل المثال لا الحصر).

[: العلوي:]

الحروف الأبجدية العليا

[: xdigit:]

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

على سبيل المثال ، قبل معيار POSIX ، لمطابقة الأحرف الأبجدية الرقمية ، كان عليك كتابة / [A-Za-z0-9] / . إذا كانت مجموعة الأحرف الخاصة بك تحتوي على أحرف أبجدية أخرى ، فهذا لا يتطابق معها ، وإذا كانت مجموعة الأحرف الخاصة بك تم تجميعها بشكل مختلف عن ASCII ، فقد لا يتطابق ذلك مع حروف ASCII الأبجدية الرقمية. مع فئات الأحرف POSIX ، يمكنك كتابة / [:: alnum:]] / ، وهذا يطابق الأحرف الأبجدية والرقمية في مجموعة الأحرف الخاصة بك.

يمكن أن يظهر تسلسلان خاصان إضافيان في قوائم الأحرف. تنطبق هذه على مجموعات أحرف غير ASCII ، والتي يمكن أن تحتوي على رموز مفردة (تسمى عناصر التجميع ) التي يتم تمثيلها بأكثر من حرف واحد ، بالإضافة إلى العديد من الأحرف التي تتناسب مع الأغراض التي يتم ترتيبها أو ترتيبها. (على سبيل المثال ، باللغة الفرنسية ، عادي "e" "" و "e-gent-accented e" متساويان).

تجميع الرموز

رمز التجميع هو عنصر تجميع متعدد الرموز محاط بـ [. و. على سبيل المثال ، إذا كان ch عبارة عن عنصر تجميع ، فإن [[.ch.]] هو تعبير عادي يتطابق مع عنصر المقارنة ، بينما [ch] هو تعبير عادي يطابق إما c أو h .

فئات التكافؤ

فئة التكافؤ هي اسم خاص بالإعدادات المحلية لقائمة بالأحرف المكافئة. الاسم محاط بـ [= و =] . على سبيل المثال ، قد يتم استخدام الاسم e لتمثيل كل من "e" و "" e "e" و "" و "` e "." في هذه الحالة ، يعد [[= e =]] تعبيرًا عاديًا يتطابق مع أي من e ، e ، أو e` .

هذه الميزات ذات قيمة كبيرة في اللغات غير الناطقة باللغة الإنجليزية. وظائف المكتبة التي يستخدمها gawk لمطابقة التعبير العادي لا تتعرف حاليًا إلا على فئات الأحرف POSIX ؛ لا يعترفون برموز التجميع أو فصول التكافؤ.

تكون عوامل التشغيل \ y ، \ B ، \ < ، \> ، \ w ، \ W ، \ ' ، و \' خاصة بالمتاهة ؛ وهي ملحقات تستند إلى التسهيلات في مكتبات تعبير GNU العادية.

تتحكم خيارات سطر الأوامر المختلفة في كيفية تفسير gawk للأحرف في التعبيرات العادية.

لا يوجد خيارات

في الحالة الافتراضية ، يوفر gawk جميع تسهيلات تعبيرات POSIX العادية وعوامل تعبير GNU العادية الموضحة أعلاه. ومع ذلك ، لا يتم دعم التعبيرات الفاصلة.

--posix

يتم دعم تعبيرات POSIX العادية فقط ، لكن مشغلي جنو ليسوا مميزين. (على سبيل المثال ، \ w تطابق حرف w ). مسموح بالتعابير الفاصلة.

--تقليدي

وتطابق التقليدية Unix awk التعبيرات العادية. مشغلي جنو ليسوا مميزين ، ولا تتوفر تعبيرات فاصلة ، ولا هي فئتي حرف POSIX ( [[: alnum:]] وما إلى ذلك). يتم التعامل مع الأحرف التي تم وصفها بتسلسل الهروب الثماني وعشريًا حرفيًا ، حتى إذا كانت تمثل أحرفًا استهلالية عادية للتعبير.

--re الفاصل الزمني

السماح بالتعبيرات الفاصلة في التعبيرات العادية ، حتى إذا تم توفير - التقليدية .

أفعال

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

العاملين

المشغلين في AWK ، من أجل تناقص الأسبقية ، هي

( ... )

تجمع

$

المرجع الميداني.

++ -

زيادة وإنقاص ، كل من البادئة و postfix.

^

الأسي (قد يتم أيضًا استخدام ** و ** = لمشغل المهمة).

+ -!

Unary plus ، unular ناقص ، ونفي منطقي.

* /٪

الضرب والقسمة والمعامل.

+ -

جمع وطرح.

الفراغ

سلسلة السلاسل.

<>

<=> =

! = == مشغلات العلائقية العادية.

~!

مطابقة التعبير العادي ، المطابقة السلبية. ملاحظة: لا تستخدم تعبير عادي ثابت ( / foo / ) على الجانب الأيسر من ~ أو ! ~ . استخدم فقط واحدة على الجانب الأيمن. التعبير / foo / ~ exp له نفس المعنى (($ 0 ~ / foo /) ~ exp ) . هذا عادة ما لا يكون المقصود.

في

عضوية صفيف.

&&

منطقي و.

||

منطقية أو.

؟:

التعبير الشرطي C. هذا لديه شكل expr1 ؟ expr2 : expr3 . إذا كانت expr1 صحيحة ، فإن قيمة التعبير هي expr2 ، وإلا فإنها expr3 . يتم تقييم واحد فقط من expr2 و expr3 .

= + = - =

* = / =٪ = ^ = تعيين. ويدعم كل من التخصيص المطلق ( var = value ) وتخصيص المشغل (الأشكال الأخرى).

بيانات التحكم

تكون عبارات التحكم كما يلي:

إذا كانت عبارة ( الحالة ) [ عبارة أخرى ] بينما تقوم عبارة ( الشرط ) بكشف عبارة ( شرط ) لبيان ( expr1 ؛ expr2 ؛ expr3 ) لفقرة عبارة ( var في صفيف ) ، فاستمر في حذف المصفوفة [ index ] delete array exit [ expression ] { عبارات }

بيانات I / O

بيانات الإدخال / الإخراج كالتالي:

أغلق ( ملف [ ، كيف ]]

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

الحصول على خط

قم بتعيين 0 دولار من سجل الإدخال التالي ؛ ضبط NF ، NR ، FNR .

getline < الملف

قم بتعيين $ 0 من السجل التالي للملف ؛ تعيين NF .

getline var

تعيين var من سجل الإدخال التالي ؛ مجموعة NR ، FNR .

getline فار < الملف

تعيين var من السجل التالي للملف .

الأمر | getline [ var ]

تشغيل الأمر piping الإخراج إما إلى $ 0 أو var ، كما هو موضح أعلاه.

الأمر | & getline [ var ]

تشغيل الأمر كأنابيب عملية مشتركة الإخراج إما إلى 0 دولار أو فار ، على النحو الوارد أعلاه. العمليات المشتركة هي امتداد gawk .

التالى

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

nextfile

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

طباعة

يطبع السجل الحالي. يتم إنهاء سجل الإخراج بقيمة متغير ORS .

طباعة قائمة expr

يطبع التعبيرات. يتم فصل كل تعبير بقيمة المتغير OFS . يتم إنهاء سجل الإخراج بقيمة متغير ORS .

print expr-list > file

يطبع التعبيرات على الملف . يتم فصل كل تعبير بقيمة المتغير OFS . يتم إنهاء سجل الإخراج بقيمة متغير ORS .

printf fmt، expr-list

تنسيق وطباعة.

printf fmt، expr-list > file

تنسيق وطباعة على الملف .

النظام ( خط cmd )

تنفيذ سطر الأوامر cmd ، وإرجاع حالة الخروج. (قد لا يكون هذا متاحًا على أنظمة غير POSIX.)

fflush ( [ ملف ] )

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

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

طباعة ... >> ملف

يضيف الإخراج إلى الملف .

طباعة ... | أمر

يكتب على أنبوب.

طباعة ... | & الأمر

يرسل البيانات إلى عملية مشتركة.

الأمر getline بإرجاع 0 على نهاية الملف و -1 على خطأ. عند حدوث خطأ ، يحتوي ERRNO على سلسلة تصف المشكلة.

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

بيان printf

إصدارات AWK من الدالة printf و sprintf () (راجع أدناه) تقبل تنسيقات مواصفات التحويل التالية:

ج٪

حرف ASCII. إذا كانت الوسيطة المستخدمة لـ ٪ c رقمية ، يتم التعامل معها كحرف ويتم طباعتها. خلاف ذلك ، يفترض أن تكون الوسيطة عبارة عن سلسلة ، ويتم طباعة أول حرف فقط لهذه السلسلة.

٪ d ، ٪ i

رقم عشري (جزء صحيح).

٪ e،٪ E

رقم نقطة عائمة للنموذج [-] d.dddddde [+ -] dd . يستخدم التنسيق ٪ E E بدلاً من e .

٪F

رقم نقطة عائمة للنموذج [-] ddd.dddddd .

٪ g ،٪ G

استخدم التحويل ٪ e أو ٪ f ، أيهما أقصر ، مع حذف الأصفار غير المخصصة. يستخدم تنسيق ٪ G ٪ E بدلاً من ٪ e .

٪ س

رقم ثماني غير موقّع (أيضًا عدد صحيح).

٪ u رقم عشري غير موقعة (مرة أخرى ، عدد صحيح).

٪ الصورة

سلسلة أحرف.

٪ x،٪ X

رقم سداسي عشري غير موقعة (عدد صحيح). يستخدم التنسيق ٪ X ABCDEF بدلاً من abcdef .

٪٪

حرف واحد ٪ يتم تحويل أي وسيطة.

اختياري ، قد تكون المعلمات الإضافية بين ٪ وخطاب التحكم:

عد $

استخدم الوسيطة th count عند هذه النقطة في التنسيق. ويسمى هذا محددًا موضعيًا ويهدف في المقام الأول للاستخدام في الإصدارات المترجمة من سلاسل التنسيق ، وليس في النص الأصلي لبرنامج AWK. إنه ملحق gawk .

-

يجب تبرير التعبير في حقله.

الفراغ

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

+

تشير علامة الزائد ، المستخدمة قبل معدِّل العرض (انظر أدناه) ، إلى توفير علامة دائمة للتحويلات الرقمية ، حتى إذا كانت البيانات المراد تنسيقها إيجابية. يتخطى + معدِّل المساحة.

#

استخدم "نموذج بديل" لخطابات تحكم معينة. للحصول على ٪ o ، أدخل صفرًا رائدًا. بالنسبة إلى ٪ x و ٪ X ، قم بتوفير 0 × أو 0X لنتيجة غير صفرية. بالنسبة إلى ٪ e و ٪ E و ٪ f ، تحتوي النتيجة دائمًا على علامة عشرية. بالنسبة إلى ٪ g و ٪ G ، لا تتم إزالة أصفار زائدة من النتيجة.

0

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

عرض

يجب أن يكون الحقل مبطنًا لهذا العرض. عادة ما يكون الحقل مبطناً بمساحات. إذا تم استخدام علامة 0 ، يتم padded مع zeroes.

. PREC

رقم يحدد الدقة التي يجب استخدامها عند الطباعة. بالنسبة إلى تنسيقات ٪ e و ٪ E و ٪ f ، يحدد هذا العدد من الأرقام التي تريد طباعتها إلى يمين النقطة العشرية. بالنسبة إلى ٪ g وتنسيقات G ، فإنه يحدد الحد الأقصى لعدد الأرقام المهمة. بالنسبة إلى التنسيقات ٪ d و ٪ o و ٪ i و ٪ u و ٪ x و ٪ X ، فإنها تحدد الحد الأدنى لعدد الأرقام المراد طباعتها. بالنسبة إلى ٪ s ، يتم تحديد الحد الأقصى لعدد الأحرف من السلسلة التي يجب طباعتها.

يتم اعتماد العرض الديناميكي والقدرات السابقة للإجراءات printf () ANSI C. A * بدلاً من العرض أو المواصفات المسبقة يؤدي إلى أخذ قيمها من قائمة الوسيطة إلى printf أو sprintf () . لاستخدام محدد موقع مع عرض ديناميكي أو دقة عرض ، قم بتعداد العد $ بعد * في سلسلة التنسيق. على سبيل المثال ، "٪ 3 $ * 2 $. * 1 $ s" .

أسماء الملفات الخاصة

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

/ ديف / ستدين

المدخلات القياسية.

/ ديف / المعياري

الإخراج القياسي.

/ ديف / ستدير

ناتج الخطأ القياسي.

/ dev / fd / n

الملف المقترن مع واصف الملف المفتوح n .

هذه مفيدة بشكل خاص لرسائل الخطأ. فمثلا:

طباعة "أنت فجر ذلك!" > "/ dev / stderr"

بينما سيكون عليك استخدام ذلك

طباعة "أنت فجر ذلك!" | "cat 1> & 2"

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

/ اينت / برنامج التعاون الفني / lport / rhost / rport

ملف اتصال TCP / IP على منفذ محلي lport إلى rhost المضيف البعيد على rport منفذ بعيد. استخدم منفذ من 0 لجعل النظام اختيار منفذ.

/ inet / udp / lport / rhost / rport

مماثلة ، ولكن استخدام UDP / IP بدلا من TCP / IP.

/ inet / raw / lport / rhost / rport

محجوزة للاستخدام في المستقبل.

أسماء ملفات خاصة أخرى توفر الوصول إلى المعلومات حول عملية gawk قيد التشغيل. هذه أسماء الملفات عفا عليها الزمن الآن. استخدم صفيف PROCINFO للحصول على المعلومات التي يقدمونها. أسماء الملفات هي:

/ ديف / معرف المنتج

تؤدي قراءة هذا الملف إلى إرجاع معرِّف العملية الخاص بالعملية الحالية ، بتنسيق عشري ، تم إنهاؤه بخط جديد.

/ ديف / ppid

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

/ ديف / pgrpid

تؤدي قراءة هذا الملف إلى عرض معرّف مجموعة العملية الخاص بالعملية الحالية ، بتنسيق عشري ، يتم إنهاؤه بخط جديد.

/ ديف / المستخدم

قراءة هذا الملف بإرجاع سجل واحد تم إنهاؤه باستخدام سطر جديد. يتم فصل الحقول بمسافات. $ 1 هي قيمة استدعاء النظام getuid (2) ، $ 2 هي قيمة استدعاء النظام geteuid (2) ، $ 3 هي قيمة استدعاء النظام getgid (2) ، و $ 4 هي قيمة getegid (2) استدعاء النظام. إذا كان هناك أي حقول إضافية ، فهي معرفات المجموعة التي يتم إرجاعها بواسطة getgroups (2). قد لا يتم دعم مجموعات متعددة على جميع الأنظمة.

وظائف عددية

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

atan2 ( ذ ، س )

يرجع قوس الظلال y / x بالراديان.

كوس ( expr )

إرجاع جيب تمام expr ، بالراديان.

exp ( expr )

الدالة الأسية.

int ( expr )

يقطع إلى عدد صحيح.

سجل ( expr )

دالة اللوغاريتم الطبيعية.

راند ()

لعرض رقم عشوائي بين 0 و 1.

الخطيئة ( expr )

لعرض جيب expr ، بالراديان.

sqrt ( expr )

وظيفة الجذر التربيعي.

سورد ( [ expr ] )

يستخدم expr كبذرة جديدة لمولد الرقم العشوائي. إذا لم يتم توفير expr ، يتم استخدام الوقت من اليوم. قيمة الإرجاع هي البذور السابقة لمولد الأعداد العشوائي.

وظائف سلسلة

يحتوي Gawk على وظائف سلسلة المضمنة التالية:

أسورت ( ق ، د )

لعرض عدد العناصر في مصفوفة المصدر s . يتم فرز محتويات s باستخدام قواعد gawk العادية لمقارنة القيم ، ويتم استبدال الفهارس الخاصة بقيم s التي تم فرزها بأعداد متتابعة تبدأ من 1. إذا تم تحديد مجموعة الوجهة الاختيارية d ، عندئذ يتم تكرار s أولاً إلى d ، ثم يتم فرز d ، وترك الفهارس لصفيف المصدر s دون تغيير.

gensub ( r ، s ، h [ ، t ] )

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

gsub ( r ، s [ ، t ] )

لكل سلسلة فرعية تطابق التعبير العادي r في السلسلة t ، استبدل السلسلة s ، وأرجع عدد البدائل. إذا لم يتم توفير t ، استخدم $ 0 . يتم استبدال & استبدال النص بالنص الذي تمت مطابقته بالفعل. استخدم \ & للحصول على حرفيا & . (يجب كتابة هذا كـ "\\ &" ؛ راجع GAWK: برمجة AWK الفعالة للحصول على مناقشة أكمل لقواعد & وخط مائل في خطوط الاستبدال من sub () و gsub () و gensub () .

مؤشر ( ق ، ر )

لعرض فهرس السلسلة t في السلسلة s ، أو 0 إذا لم يكن t موجودًا. (وهذا يعني أن مؤشرات الشخصيات تبدأ من واحد.)

الطول ( [ s ] )

إرجاع طول السلسلة s ، أو طول $ 0 إذا لم يتم توفير s .

المباراة ( ق ، ص [ ، أ ] )

لعرض الموضع في s حيث يحدث التعبير العادي r ، أو 0 إذا كان r غير موجود ، ويقوم بتعيين قيم RSTART و RLENGTH . لاحظ أن ترتيب الوسيطة مماثل للعامل ~ : str ~ re . إذا تم توفير المصفوفة a ، يتم مسح a ومن ثم يتم ملء العناصر من 1 إلى n مع أجزاء s التي تتطابق مع subExpression المتقابل في r . يحتوي العنصر 0'th من a على جزء s المتوافق مع التعبير العادي بأكمله r .

split ( s ، a [ ، r ] )

يُقسِّم السلسلة s إلى المصفوفة a على التعبير العادي r ، ويعيد عدد الحقول. إذا تم حذف r ، يتم استخدام FS بدلاً من ذلك. يتم مسح الصفيف أولاً. يتطابق التقسيم بشكل مماثل مع تقسيم المجال ، الموضح أعلاه.

sprintf ( fmt ، expr-list )

يطبع expr- قائمة وفقا ل fmt ، وترجع السلسلة الناتجة.

strtonum ( str )

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

sub ( r ، s [ ، t ] )

تمامًا مثل gsub () ، ولكن تم استبدال أول سلسلة فرعية مطابقة فقط.

substr ( s ، i [ ، n ] )

تُرجع على الأقل سلسلة فرعية لـ x-sracter من s بدءًا من i . إذا تم حذف n ، يتم استخدام باقي s .

تولوي ( str )

لعرض نسخة من سلسلة الأحرف ، مع ترجمة جميع الأحرف الكبيرة في str إلى نظائرها المقابلة ذات الحالة الأدنى. يتم ترك الأحرف غير أبجدية دون تغيير.

toupper ( str )

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

وظائف الوقت

وبما أن أحد الاستخدامات الأساسية لبرامج AWK هو معالجة ملفات السجل التي تحتوي على معلومات طابع الوقت ، فإن أداة gawk توفر الوظائف التالية للحصول على الطوابع الزمنية وتنسيقها.

mktime ( datepec )

Rurns datepec في طابع زمني من نفس النموذج كما عاد بواسطة systime () . Datepec هو سلسلة من النموذج YYYY MM DD HH MM SS [DST] . محتويات السلسلة هي ستة أو سبعة أرقام تمثل على التوالي السنة الكاملة بما في ذلك القرن ، والشهر من 1 إلى 12 ، ويوم الشهر من 1 إلى 31 ، وساعة اليوم من 0 إلى 23 ، والدقيقة من 0 إلى 59 ، والثانية من 0 إلى 60 ، وعلامة حفظ الصيفي اختيارية. لا يجب أن تكون قيم هذه الأرقام ضمن النطاقات المحددة ؛ على سبيل المثال ، تعني ساعة واحدة -1 ساعة واحدة قبل منتصف الليل. يفترض التقويم الغريغوري الأصل صفر ، مع السنة السابقة للسنة 1 والسنة -1 السابقة للسنة 0. يفترض أن يكون الوقت في المنطقة الزمنية المحلية. إذا كانت إشارة حفظ التوقيت الصيفي موجبة ، فمن المفترض أن يكون الوقت هو التوقيت الصيفي. إذا كان الصفر ، يفترض أن الوقت هو الوقت القياسي ؛ وإذا كان سالباً (الافتراضي) ، يحاول mktime () تحديد ما إذا كان وقت حفظ الصيفي ساريًا للوقت المحدد أم لا. إذا لم يحتوي datepec على عناصر كافية أو إذا كان الوقت الناتج خارج النطاق ، فسوف تُرجع mktime () -1.

strftime ( [ format [ ، timestamp ]] )

تنسيقات الطابع الزمني وفقا للمواصفات في الشكل. يجب أن يكون الطابع الزمني للنموذج نفسه الذي تم إرجاعه بواسطة systime () . إذا كان الطابع الزمني مفقودًا ، فسيتم استخدام الوقت الحالي من اليوم. إذا كان التنسيق مفقودًا ، فسيتم استخدام تنسيق افتراضي مكافئ لمخرج التاريخ (1). راجع مواصفات الدالة strftime () في ANSI C لتحويلات التنسيق المضمونة. نسخة عامة من النطاق strftime (3) وصفحة رجل لأنها تأتي مع gawk ؛ إذا تم استخدام هذا الإصدار لإنشاء gawk ، فستكون جميع التحويلات الموضحة في صفحة الرجل هذه متاحة للتثاؤب.

systime ()

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

بت التلاعب بالوظائف

بدءاً من الإصدار 3.1 من gawk ، تتوفر وظائف معالجة البتات التالية. وهي تعمل على تحويل قيم النقطة العائمة مزدوجة الدقة إلى أعداد صحيحة طويلة غير موقعة ، ثم إجراء العملية ، ثم تحويل النتيجة إلى نقطة عائمة. الوظائف هي:

و ( v1 و v2 )

قم بإرجاع bitwise AND من القيم المقدمة من v1 و v2 .

compl ( val )

أعد مكملة البتات من val .

lshift ( val ، count )

إرجاع قيمة val ، shifted اليسار بواسطة بت البت.

أو ( v1 و v2 )

قم بإرجاع bitwise OR للقيم المقدمة بواسطة v1 و v2 .

rshift ( val ، count )

قم بإرجاع قيمة val ، وقم بالانتقال إلى اليمين بت عدد البت.

xor ( الإصدار 1 ، الإصدار 2 )

قم بإرجاع XOR للبتة من القيم المقدمة من v1 و v2 .

وظائف التدويل

بدءاً من الإصدار 3.1 من gawk ، يمكن استخدام الوظائف التالية من خلال برنامج AWK لترجمة السلاسل في وقت التشغيل. للحصول على التفاصيل الكاملة ، راجع GAWK: برمجة AWK الفعالة .

bindtextdomain ( الدليل [ ، المجال ] )

يحدد الدليل الذي يبحث فيه gawk عن ملفات .mo ، في حالة عدم وضعه أو عدم إمكانية وضعه في المواقع "القياسية" (على سبيل المثال ، أثناء الاختبار). تقوم بإرجاع الدليل حيث يكون النطاق "مُقيدًا".

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

dcgettext ( string [ ، domain [ ، category ]] )

إرجاع ترجمة السلسلة في نطاق المجال النصي لفئة لغة الإعدادات المحلية. القيمة الافتراضية للمجال هي القيمة الحالية لـ TEXTDOMAIN . القيمة الافتراضية للفئة هي "LC_MESSAGES" .

إذا قمت بتوفير قيمة للفئة ، فيجب أن تكون سلسلة مساوية لإحدى فئات اللغات المعروفة الموضحة في GAWK: برمجة AWK الفعالة . يجب عليك أيضا توفير مجال النص. استخدم TEXTDOMAIN إذا كنت تريد استخدام النطاق الحالي.

dcngettext ( string1 ، string2 ، number [ ، domain [ ، category ]] )

لعرض صيغة الجمع المستخدمة في عدد ترجمة string1 و string2 في نطاق النطاق النصي لفئة اللغة المحلية. القيمة الافتراضية للمجال هي القيمة الحالية لـ TEXTDOMAIN . القيمة الافتراضية للفئة هي "LC_MESSAGES" .

إذا قمت بتوفير قيمة للفئة ، فيجب أن تكون سلسلة مساوية لإحدى فئات اللغات المعروفة الموضحة في GAWK: برمجة AWK الفعالة . يجب عليك أيضا توفير مجال النص. استخدم TEXTDOMAIN إذا كنت تريد استخدام النطاق الحالي.

وظائف محددة من قبل المستخدم

يتم تعريف وظائف AWK على النحو التالي:

اسم الوظيفة ( قائمة المعلمات ) { عبارات }

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

نظرًا لأن الوظائف لم تكن في الأصل جزءًا من لغة AWK ، فإن توفير المتغيرات المحلية هو بالأحرى خرقاء إلى حد ما: يتم الإعلان عنها كمعلمات إضافية في قائمة المعلمات. الاتفاقية هي لفصل المتغيرات المحلية من المعلمات الحقيقية بمسافات إضافية في قائمة المعلمات. فمثلا:

function f (p، q، a، b) # a and b are local {...} / abc / {...؛ و (1 ، 2) ؛ ...}

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

قد تتصل الوظائف ببعضها البعض وقد تكون متكررة. تتم تهيئة المعلمات الدالة المستخدمة مثل المتغيرات المحلية إلى سلسلة فارغة والعدد الصفر عند استدعاء الدالة.

استخدم expr للعودة لإرجاع قيمة من دالة. قيمة الإرجاع غير محددة إذا لم يتم تقديم أي قيمة ، أو إذا كانت الدالة ترجع عن طريق "fall off off" (النهاية).

إذا تم توفير --lint ، يحذر gawk حول المكالمات إلى وظائف غير محددة في وقت التحليل ، بدلاً من وقت التشغيل. يعتبر استدعاء دالة غير محددة في وقت التشغيل خطأ فادح.

يمكن استخدام كلمة func في مكان الوظيفة .

DYNAMICALLY تحميل وظائف جديدة

بدءًا من الإصدار 3.1 من أداة gawk ، يمكنك إضافة وظائف مدمجة جديدة ديناميكيًا إلى مترجم gawk الجري. التفاصيل الكاملة خارج نطاق هذه الصفحة اليدوية ؛ انظر GAWK: برمجة AWK فعالة للحصول على التفاصيل.

تمديد ( كائن ، وظيفة )

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

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

إشارات

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

أمثلة

طباعة وأسماء تسجيل الدخول لجميع المستخدمين: BEGIN {FS = ":"} {print $ 1 | "sort"} قم بإحصاء الأسطر في ملف: {nlines ++} END {print nlines} قبل كل سطر بواسطة رقمه في الملف: {print FNR، $ 0} Concatenate ورقم السطر (شكل مختلف على نسق): {print NR، 0 دولار

الاستيعاب الداخلي

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

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

يطبع دائما مرحبا ، العالم . لكن،

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

قد تطبع bonjour ، monde في فرنسا.

هناك العديد من الخطوات التي ينطوي عليها إنتاج وتشغيل برنامج AWK قابل للتعيين.

1.

إضافة إجراء BEGIN لتعيين قيمة لمتغير TEXTDOMAIN لتعيين نطاق النص إلى اسم مرتبط ببرنامجك .


BEGIN {TEXTDOMAIN = "myprog"}

هذا يسمح gawk للعثور على ملف .mo المرتبط ببرنامجك . بدون هذه الخطوة ، يستخدم gawk مجال الرسائل النصية ، والذي من المحتمل ألا يحتوي على ترجمات لبرنامجك.

2.

قم بتمييز كل السلاسل التي يجب ترجمتها باستخدام الشرطات السفلية الأمامية.

3.

إذا لزم الأمر ، استخدم الدالتين dcgettext () و / أو bindtextdomain () في البرنامج ، كما هو مناسب.

4.

تشغيل gawk --gen-po -f myprog.awk> myprog.po لإنشاء ملف .po لبرنامجك .

5.

توفير الترجمات المناسبة ، وبناء وتثبيت ملف .mo المقابل.

يتم وصف ميزات التدويل بالتفصيل الكامل في GAWK: برمجة AWK الفعالة .

توافق Posix

يتمثل الهدف الأساسي للـ gawk في التوافق مع معيار POSIX ، بالإضافة إلى الإصدار الأحدث من UNIX awk . ولتحقيق هذه الغاية ، يتضمن gawk الميزات المرئية التالية للمستخدم والتي لم يتم وصفها في كتاب AWK ، ولكنها جزء من إصدار مختبرات Bell awk ، وهي في معيار POSIX.

يشير الكتاب إلى أن تخصيص متغير سطر الأوامر يحدث عندما تقوم awk بفتح الوسيطة كملف ، وذلك بعد تنفيذ BEGIN block. ومع ذلك ، في التطبيقات السابقة ، عندما ظهر مثل هذا التعيين قبل أي أسماء ملفات ، فإن الواجب سيحدث قبل تشغيل BEGIN block. وجاءت التطبيقات تعتمد على هذه الميزة. 'عندما تم تغيير awk ليطابق وثائقه ، تمت إضافة الخيار -v لتعيين المتغيرات قبل تنفيذ البرنامج لاستيعاب التطبيقات التي تعتمد على السلوك القديم. (تم الاتفاق على هذه الميزة من قبل مختبرات بيل ومطوري غنو).

الخيار -W لميزات محددة للتنفيذ هو من معيار POSIX.

عند معالجة الوسيطات ، يستخدم gawk الخيار الخاص "` - "للإشارة إلى نهاية الوسيطات. في وضع التوافق ، يحذر من ذلك ولكنه يتجاهل خيارات غير محددة. في التشغيل العادي ، يتم تمرير مثل هذه الحجج إلى برنامج AWK ليتم معالجتها.

لا يحدد الكتاب AWK قيمة الإرجاع srand () . تقوم معيار POSIX بإرجاع البذور التي كانت تستخدمها ، للسماح بتتبع تسلسلات الأرقام العشوائية. لذا ، فإن srand () في gawk يُرجع أيضًا بذوره الحالي.

الميزات الجديدة الأخرى هي: استخدام خيارات متعددة -f (من MKS awk ) ؛ مجموعة ENVIRON تسلسلات الهروب \ a و \ v (تم عملها أصلاً في شكل gawk وتم إعادتها إلى إصدار مختبرات Bell) ؛ الدوال (tolower () and toupper () المضمنة (من إصدار مختبرات Bell) ؛ ومواصفات تحويل ANSI C في printf (يتم أولاً في إصدار مختبرات Bell).

الميزات التاريخية

هناك ميزتان من تطبيقات AWK التاريخية التي يدعمها gawk . أولاً ، يمكن استدعاء الدالة length () المضمنة ليس فقط بدون أي حجة ، ولكن حتى بدون الأقواس! وهكذا،

a = length # Holy Algol 60، Batman!

هو نفسه كأي من

أ = الطول ()
أ = الطول (0 دولار)

تم وضع علامة على هذه الخاصية كـ `deprecated 'في معيار POSIX ، ويصدر gawk تحذيرًا حول استخدامه إذا تم تحديد --lint في سطر الأوامر.

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

ملحقات جنو

لدى Gawk عددًا من الإضافات لـ POSIX awk . يتم وصفها في هذا القسم. يمكن تعطيل جميع الإضافات الموضحة هنا من خلال استدعاء gawk باستخدام الخيار - اختياري.

الميزات التالية من gawk غير متوفرة في POSIX awk .

*

لا يتم إجراء بحث عن مسار للملفات المسماة عبر الخيار -f . لذلك متغير البيئة AWKPATH غير خاص.

*

تسلسل الهروب. (مع تعطيل --posix .)

*

وظيفة fflush () . (مع تعطيل --posix .)

*

القدرة على مواصلة الخطوط بعد ؟ و :. (مع تعطيل --posix .)

*

الثوابت الثمانية والساعية السداسية في برامج AWK.

*

متغيرات ARGIND و BINMODE و ERRNO و LINT و RT و TEXTDOMAIN ليست خاصة.

*

متغير IGNORECASE وآثاره الجانبية غير متوفرة.

*

متغير FIELDWIDTHS وحقل حقل العرض الثابت.

*

صفيف PROCINFO غير متوفر.

*

استخدام RS كتعبير عادي.

*

لا يتم التعرف على أسماء الملفات الخاصة المتاحة لإعادة توجيه I / O.

*

مشغل | & مشغل لإنشاء عمليات مشتركة.

*

القدرة على تقسيم الأحرف الفردية باستخدام سلسلة فارغة كقيمة FS ، وكوسيطة ثالثة للانقسام () .

*

الوسيطة الثانية الاختيارية للوظيفة close () .

*

الوسيطة الثالثة الاختيارية للدالة match () .

*

القدرة على استخدام محددات المواقع مع printf و sprintf () .

*

استخدام صف الحذف لحذف محتويات صفيف بالكامل.

*

استخدام nextfile للتخلي عن معالجة ملف الإدخال الحالي.

*

و و () و asort () و bindtextdomain () و compl () و dcgettext () و gensub () و lshift () و mktime () و () و rshift () و strftime () و strtonum () و systime () و xor () وظائف.

*

سلاسل قابلة للترجمة.

*

إضافة وظائف مضمنة جديدة ديناميكيًا باستخدام الدالة extension () .

لا يقوم الكتاب AWK بتعريف قيمة الإرجاع للدالة close () . يقوم إغلاق gawk () بإرجاع القيمة من fclose (3) ، أو pclose (3) ، عند إغلاق ملف إخراج أو أنبوب ، على التوالي. تقوم بإرجاع حالة الخروج العملية عند إغلاق أنبوب الإدخال. قيمة الإرجاع هي -1 إذا لم يتم فتح الملف المسمى أو أنبوب أو عملية المشاركة مع إعادة توجيه.

عندما يتم استدعاء gawk باستخدام الخيار --traditional ، إذا كانت الوسيطة fs إلى الخيار -F هي '' t '' ، فسيتم تعيين FS على حرف الجدولة. لاحظ أن كتابة gawk -F \ t ... يؤدي ببساطة إلى وضع علامة تشير إلى "` t "'، ولا يمرر` `\ t' 'إلى الخيار -F . نظرًا لأن هذه الحالة خاصة قبيحة إلى حد ما ، فهي ليست السلوك الافتراضي. لا يحدث هذا السلوك أيضًا إذا تم تحديد --posix . للحصول على حرف جدولة كفاصل الحقل ، من الأفضل استخدام علامات الاقتباس المفردة: gawk -F '\ t' ....

انظر الأوامر الأخرى : الانتظار ، lp ، كاملة ، execv ، getfacl ، ioctl ، uniq ، rmmod ، pvcreate ، rsh ، unix2dos ، cal ، fs ، cd ، iwpriv ، swapon ، autofs ، talk ، motd ، free ، lpr ، execl ، fdisk ، at ، who ، iwconfig ، ifconfig ، vgdisplay ، open ، lsmod ، ntohs ، mailq ، kill ، wtmp