الانجليزيةالفرنسيةإسباني

تشغيل الخوادم | Ubuntu > | Fedora > |


OnWorks فافيكون

mawk - الإنترنت في السحابة

قم بتشغيل mawk في مزود استضافة OnWorks المجاني عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة على الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


mawk - مسح الأنماط ولغة معالجة النصوص

موجز


mawk [-W خيار] [-F القيمة] [-v فار = القيمة] [-] "نص البرنامج" [ملف ...]
mawk [-W خيار] [-F القيمة] [-v فار = القيمة] [-f ملف البرنامج] [--] [ملف ...]

وصف


mawk هو مترجم فوري للغة البرمجة AWK. لغة AWK مفيدة ل
التلاعب بملفات البيانات ، واسترجاع النص ومعالجته ، ولإنشاء النماذج الأولية و
تجربة الخوارزميات. mawk هو جديد AWK بمعنى أنه يطبق لغة AWK
كما هو محدد في Aho و Kernighan و Weinberger ، يوفر AWK برمجة وتطوير لغة، أديسون ويسلي
النشر ، 1988. (يشار إليه فيما بعد باسم كتاب AWK.) mawk يتوافق مع Posix
1003.2 (مسودة 11.3) تعريف لغة AWK الذي يحتوي على بعض الميزات لا
الموصوفة في كتاب AWK ، و mawk يوفر عددًا صغيرًا من الامتدادات.

برنامج AWK هو سلسلة من النمط {عمل} أزواج وتعريفات الوظائف. قصيرة
يتم إدخال البرامج في سطر الأوامر وعادة ما يتم تضمينها في "" لتجنب shell
ترجمة. يمكن قراءة البرامج الأطول من ملف باستخدام الخيار -f. البيانات
تتم قراءة الإدخال من قائمة الملفات الموجودة على سطر الأوامر أو من الإدخال القياسي عندما يكون ملف
القائمة فارغة. يتم تقسيم الإدخال إلى سجلات كما هو محدد بواسطة فاصل السجل
متغير، RS. في البداية، RS = "\ n" والسجلات مرادفة للأسطر. كل سجل
مقارنة بكل منها النمط وإذا كان يتطابق ، فإن نص البرنامج لـ {عمل} is
أعدم.

OPTIONS


-F القيمة يحدد فاصل المجال ، FS، إلى القيمة.

-f ملف نص البرنامج للقراءة من ملف بدلا من سطر الأوامر. عديد
-f الخيارات مسموح بها.

-v فار = القيمة المتنازل القيمة لبرمجة المتغير فار.

- يشير إلى النهاية الواضحة للخيارات.

ستكون الخيارات المذكورة أعلاه متاحة مع أي تطبيق متوافق مع Posix لـ AWK و
تنفيذ خيارات محددة مع -W. mawk يقدم ستة:

-W الإصدار mawk يكتب نسخته وحقوق النشر الخاصة به إلى حدود stdout وتجميعها لـ
stderr ومخارج 0.

-W يكتب التفريغ مجمّعًا مثل سرد التمثيل الداخلي لـ
برنامج stdout والمخارج 0 (على تجميع ناجح).

-W مجموعات تفاعلية يكتب غير مخزنة إلى stdout وخط قراءات مخزنة من stdin.
السجلات من stdin هي أسطر بغض النظر عن قيمة RS.

-W EXEC ملف نص البرنامج للقراءة من ملف وهذا هو الخيار الأخير. مفيد على
الأنظمة التي تدعم #! اصطلاح "الرقم السحري" للملف التنفيذي
مخطوطات.

-W سبرينتف =NUM يضبط حجم mawk's العازلة الداخلية sprintf ل NUM بايت. أكثر من
الاستخدام النادر لهذا الخيار يشير mawk يجب إعادة تجميعها.

-W posix_space القوات mawk عدم اعتبار '\ n' مساحة.

الأشكال القصيرة -W[vdiesp] معترف بها وفي بعض الأنظمة -Wالبريد إلزامي لتجنب
قيود طول سطر الأوامر.

العرض AWK لغة


1. برنامج بناء
برنامج AWK هو سلسلة من النمط {عمل} أزواج وتعريفات وظائف المستخدم.

يمكن أن يكون النمط:
ابدأ
END
التعبير
التعبير والتعبير

واحد ، ولكن ليس كلاهما ، من النمط {عمل} يمكن حذف. لو {عمل} تم حذفه هو
ضمنيًا {طباعة}. لو النمط تم حذفه ، ثم تتم مطابقته ضمنيًا. ابدأ و
END تتطلب أنماط العمل.

يتم إنهاء العبارات بأسطر جديدة أو فاصلة منقوطة أو كليهما. مجموعات من العبارات مثل
يتم حظر الإجراءات أو أجسام الحلقة عبر {...} كما في C. البيان الأخير في الكتلة
لا يحتاج إلى فاصل. لا معنى للأسطر الفارغة ؛ تم إنهاء بيان فارغ
مع فاصلة منقوطة. يمكن متابعة العبارات الطويلة بشرطة مائلة للخلف ، \. يمكن بيان
يتم كسرها بدون شرطة مائلة للخلف بعد فاصلة ، قوس أيسر ، &&، ||، do, آخرالحق
بين قوسين من if, في حين or لل البيان ، والقوس الأيمن للدالة
تعريف. يبدأ التعليق بـ # ويمتد إلى ، لكنه لا يشمل نهاية السطر.

تتحكم العبارات التالية في تدفق البرنامج داخل الكتل.

if ( على سبيل المثال ) بيان

if ( على سبيل المثال ) بيان آخر بيان

في حين ( على سبيل المثال ) بيان

do بيان في حين ( على سبيل المثال )

لل ( opt_expr ; opt_expr ; opt_expr ) بيان

لل ( فار in مجموعة ) بيان

استمر

استراحة

2. البيانات أنواع، تحويل و مقارنة
هناك نوعان من البيانات الأساسية ، رقمي وسلسلة. يمكن أن تكون الثوابت الرقمية مثل عدد صحيح
-2 ، رقم عشري مثل 1.08 ، أو في التدوين العلمي مثل -1.1e4 أو .28E-3. كل الأرقام
يتم تمثيلها داخليًا ويتم إجراء جميع الحسابات في حساب الفاصلة العائمة. وذلك ل
على سبيل المثال ، التعبير 0.2e2 == 20 صحيح ويتم تمثيل صحيح على أنه 1.0.

ثوابت السلسلة محاطة بعلامات اقتباس مزدوجة.

"هذه سلسلة ذات سطر جديد في نهايتها. \ n"

يمكن متابعة السلاسل عبر السطر بالهروب (\) من السطر الجديد. الهروب التالي
يتم التعرف على التسلسل.

\\ \
\ ""
تنبيه ، ASCII 7
\ b مسافة للخلف ، أسكي 8
\ t علامة التبويب ASCII 9
\ n سطر جديد ، أسكي 10
\ v علامة تبويب عمودية ، تصاعدي 11
\ و التغذية ، ASCII 12
\ r إرجاع السطر ، ASCII 13
\ ddd 1 أو 2 أو 3 أرقام ثماني لـ ascii ddd
\ xhh 1 أو 2 رقم ست عشري لـ ascii hh

إذا هربت من أي حرف آخر \ c ، فستحصل على \ c ، على سبيل المثال ، mawk يتجاهل الهروب.

هناك بالفعل ثلاثة أنواع أساسية من البيانات ؛ والثالث هو عدد و سلسلة الذي يحتوي على كلا
قيمة رقمية وقيمة سلسلة في نفس الوقت. المتغيرات المحددة من قبل المستخدم تأتي في
الوجود عند الإشارة إليه لأول مرة ويتم تهيئته إلى فارغة، قيمة عدد وسلسلة
التي لها قيمة عددية 0 وقيمة سلسلة "". عدد غير تافه وسلسلة البيانات المكتوبة
تأتي من المدخلات وعادة ما يتم تخزينها في الحقول. (انظر القسم 4).

يتم تحديد نوع التعبير من خلال سياقه وتحويل النوع التلقائي
يحدث إذا لزم الأمر. على سبيل المثال ، لتقييم العبارات

ص = س + 2 ؛ z = x "مرحبًا"

سيتم كتابة القيمة المخزنة في المتغير y رقمية. إذا لم يكن x عددًا ، فسيتم قراءة القيمة
من x إلى رقم قبل إضافته إلى 2 وتخزينه في y. القيمة المخزنة
في المتغير z ستكتب سلسلة ، وقيمة x سيتم تحويلها إلى سلسلة إذا
ضروري ومتسلسل بـ "مرحبًا". (بالطبع ، القيمة والنوع المخزنان في x هو
لم تتغير بأي تحويلات.) يتم تحويل تعبير السلسلة إلى رقمي باستخدامه
أطول بادئة عددية كما في في ل(3). يتم تحويل التعبير الرقمي إلى سلسلة بواسطة
استبدال على سبيل المثال مع سبرينتف (CONVFMT, على سبيل المثال)، ما لم على سبيل المثال يمكن تمثيلها على المضيف
الجهاز باعتباره عددًا صحيحًا دقيقًا ثم يتم تحويله إلى sprintf("٪د"، على سبيل المثال). سبرنتف () هو
AWK مدمج يكرر وظائف sprintf(3)، و CONVFMT هو مدمج
متغير يستخدم للتحويل الداخلي من رقم إلى سلسلة ويتم تهيئته إلى "٪ .6g".
يمكن فرض تحويلات النوع الصريح ، على سبيل المثال "" هو سلسلة و على سبيل المثال+0 رقم.

لتقييم، على سبيل المثال1 rel-op على سبيل المثال2 ، إذا كان كلا المعاملين رقميًا أو رقمًا وسلسلة
المقارنة رقمية إذا كان كلا المعاملين عبارة عن سلسلة ، تكون المقارنة عبارة عن سلسلة ؛ إذا كان أحد
المعامل عبارة عن سلسلة ، يتم تحويل المعامل غير سلسلة والمقارنة هي سلسلة. ال
النتيجة رقمية ، 1 أو 0.

في السياقات المنطقية مثل ، if ( على سبيل المثال ) بيان، يتم تقييم تعبير السلسلة بشكل صحيح إذا
وفقط إذا لم تكن السلسلة الفارغة "" ؛ القيم الرقمية إذا وفقط إذا لم يكن رقميًا
صفر.

3. العادي التعبيرات
في لغة AWK ، غالبًا ما يتم اختبار السجلات والحقول والسلاسل لمطابقة ملف منتظم
التعبير. يتم تضمين التعبيرات العادية بشرطة مائلة ، و

على سبيل المثال ~ /r/

هو تعبير AWK يتم تقييمه إلى 1 إذا على سبيل المثال "اعواد الكبريت" r، وهو ما يعني سلسلة فرعية من
على سبيل المثال يقع في مجموعة السلاسل المحددة بواسطة r. بدون تطابق ، يتم تقييم التعبير إلى 0 ؛
استبدال ~ مع عامل التشغيل "غير متطابق" ،! ~ ، يعكس المعنى. كنمط العمل
أزواج

/r/ { عمل } و $0 ~ /r/ { عمل }

هي نفسها ، ولكل سجل إدخال يطابق r, عمل يتم تنفيذ. حقيقة، /r/
هو تعبير AWK يعادل ($0 ~ /r/) في أي مكان ما عدا على اليمين
جانب عامل تشغيل المطابقة أو تم تمريره كوسيطة إلى دالة مضمنة تتوقع أ
حجة التعبير العادي.

AWK يستخدم التعبيرات العادية الموسعة مثل egrep(1). التعبير النمطي
الحروف الأولية ، أي تلك التي لها معنى خاص في التعبيرات النمطية هي

^ دولار. [] | () * +؟

يتم إنشاء التعبيرات العادية من الأحرف على النحو التالي:

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

\c يطابق حرفًا محددًا بواسطة نفس تسلسلات الإفلات المستخدمة في
ثوابت السلسلة أو الحرف الحرفي c لو \c ليس هروب
تسلسل.

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

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

$ يطابق الجزء الخلفي من السلسلة.

يتطابق [c1c2c3 ...] مع أي حرف في الفئة c1c2c3 .... فاصل
يتم الإشارة إلى الأحرف c1-c2 داخل فئة [...].

يتطابق [^ c1c2c3 ...] مع أي حرف ليس في الفئة c1c2c3 ...

يتم إنشاء التعبيرات العادية من التعبيرات العادية الأخرى على النحو التالي:

r1rمباريات شنومكس r1 يليه على الفور r2 (التسلسل).

r1 | rمباريات شنومكس r1 أو r2 (التناوب).

r* اعواد الكبريت r كرر صفر أو أكثر من مرة.

r+ مباريات r كرر مرة واحدة أو أكثر.

r؟ اعواد الكبريت r صفر أو مرة واحدة.

(r) اعواد الكبريت r، توفير التجميع.

الأسبقية المتزايدة للعوامل هي التناوب والتسلسل وأحادي (* ، + أو
؟).

على سبيل المثال،

/ ^ [_ a-zA-Z] [_ a-zA-Z0-9] * $ / و
/^[-+]?([0-9]+\.?|\.[0-9])[0-9]*([eE][-+]?[0-9]+)?$/

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

يمكن استخدام أي تعبير على الجانب الأيمن من عوامل التشغيل ~ أو! ~ أو تمريره إلى a
مدمج يتوقع تعبيرًا عاديًا. إذا لزم الأمر ، يتم تحويلها إلى سلسلة ، و
ثم يتم تفسيره على أنه تعبير عادي. على سبيل المثال،

ابدأ {identifier = "[_a-zA-Z] [_ a-zA-Z0-9] *"}

$ 0 ~ المعرف "^"

يطبع جميع الأسطر التي تبدأ بمعرف AWK.

mawk يتعرف على التعبير النمطي الفارغ ، // ، الذي يطابق السلسلة الفارغة وبالتالي
أي سلسلة في الأمام والخلف وبين كل حرف. على سبيل المثال،

صدى abc | mawk {gsub (//، "X") ؛ مطبعة }
XaXbXcX

4. تسجيل و الحقول
تتم قراءة السجلات في وقت واحد ، ويتم تخزينها في ملف حقل متغير $0. السجل هو
انقسم إلى الحقول التي يتم تخزينها في $1, $2، ... ، NF دولار. المتغير الداخلي NF تم تعيين
لعدد الحقول ، و NR و FNR بمقدار 1. الحقول أعلاه NF دولار يتم تعيين إلى
"".

الاحالة ل $0 يسبب الحقول و NF ليتم إعادة حسابها. الاحالة ل NF أو إلى
الأسباب الميدانية $0 ليتم إعادة بنائها عن طريق تسلسل $ أنا مفصوله ب OFS.
التعيين إلى حقل به فهرس أكبر من NF، يزيد NF والأسباب $0 أن تكون
أعيد بناؤه.

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

صدى 24 24E |
mawk '{print ($ 1> 100، $ 1> "100"، $ 2> 100، $ 2> "100")}'
0 1 1 1

$0 و $2 هي سلسلة و $1 هو عدد وسلسلة. المقارنة الأولى رقمية ، و
الثاني عبارة عن سلسلة ، والثالثة عبارة عن سلسلة (100 يتم تحويلها إلى "100") ، والأخيرة عبارة عن سلسلة.

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

تتكون التعبيرات الجديدة من العوامل التالية بترتيب الزيادة
الأولوية.

مهمة = + = - = * = / =٪ = ^ =
شرطي ؟ :
منطقي or ||
منطقي و &&
مجموعة عضوية in
مطابقة ~! ~
العلائقية <> <=> = ==! =
سلسلة (لا يوجد عامل صريح)
تضيف مكتب خدمات المشاريع + -
MUL مكتب خدمات المشاريع * /٪
أحادي + -
منطقي ليس !
الأسي ^
المؤتمر الوطني العراقي و ديسمبر ++ - (ما قبل وما بعد)
حقل $

التعيين ، الشرطي والأسي المنتسب من اليمين إلى اليسار ؛ المشغلين الآخرين
اقتران من اليسار إلى اليمين. يمكن وضع أي تعبير بين أقواس.

6. المصفوفات
يوفر Awk مصفوفات أحادية البعد. يتم التعبير عن عناصر المصفوفة كـ مجموعة[على سبيل المثال]. مثال
داخليًا إلى نوع سلسلة ، لذلك ، على سبيل المثال ، A [1] و A ["1"] متماثلان
العنصر والفهرس الفعلي هو "1". تسمى المصفوفات المفهرسة بالسلاسل الترابطية
المصفوفات. في البداية تكون المصفوفة فارغة ؛ عناصر موجودة عند الوصول إليها لأول مرة. تعبير،
على سبيل المثال in مجموعة بتقييم 1 إذا مجموعة[على سبيل المثال] موجود ، وإلا إلى 0.

هناك شكل من أشكال لل العبارة التي تدور حول كل فهرس من المصفوفة.

لل ( فار in مجموعة ) بيان

بدلات رسمية فار لكل فهرس من مجموعة وينفذ بيان. الترتيب الذي فار المستعرضات
مؤشرات مجموعة غير محدد.

البيان، حذف مجموعة[على سبيل المثال] ، الأسباب مجموعة[على سبيل المثال] لا وجود لها. mawk يدعم
تمديد، حذف مجموعة، والذي يحذف جميع عناصر مجموعة.

يتم تصنيع المصفوفات متعددة الأبعاد بالتسلسل باستخدام المتغير الداخلي
ثانوية. مجموعة[على سبيل المثال1,على سبيل المثال2] يعادل مجموعة[على سبيل المثال1 ثانوية على سبيل المثال2]. اختبار ل
يستخدم العنصر متعدد الأبعاد فهرسًا بين قوسين ، مثل

إذا ((i، j) in A) اطبع A [i، j]

7. المتغيرات المدمجة
المتغيرات التالية مدمجة ومهيأة قبل تنفيذ البرنامج.

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

ARGV صفيف من وسيطات سطر الأوامر ، 0..ARGC-1.

CONVFMT تنسيق للتحويل الداخلي للأرقام إلى سلسلة ، في البداية = "٪ .6g".

البيئة مجموعة مفهرسة بواسطة متغيرات البيئة. سلسلة البيئة ، فار = القيمة
يتم تخزينه على هيئة البيئة[فار] = القيمة.

اسم الملف اسم ملف الإدخال الحالي.

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

FS يقسم السجلات إلى حقول كتعبير عادي.

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

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

OFMT تنسيق لطباعة الأرقام ؛ في البداية = "٪ .6g".

OFS تم إدراجه بين الحقول عند الإخراج ، في البداية = "".

ORS إنهاء كل سجل على الإخراج ، في البداية = "\ n".

طول الطول الذي تحدده آخر مكالمة للوظيفة المضمنة ، مباراة().

RS فاصل سجل الإدخال ، في البداية = "\ n".

RSTART الفهرس الذي تم تعيينه بواسطة آخر مكالمة لـ مباراة().

ثانوية تُستخدم لبناء عدة رموز مصفوفة ، مبدئيًا = "\ 034".

8. مدمج وظائف
وظائف سلسلة

gsub (ص ، ق ، ت) gsub (ص ، ق)
استبدال عام ، كل تطابق للتعبير النمطي r ثابت t is
استبدالها بسلسلة s. تم إرجاع عدد الاستبدالات. لو t is
محذوف ، $0 يستخدم. & في سلسلة الاستبدال s يتم استبداله ب
سلسلة فرعية متطابقة من t. \ & و \\ وضع الحرفين & و \ على التوالي في
سلسلة الاستبدال.

فهرس(شارع)
If t هي سلسلة فرعية من s، ثم الموضع حيث t يتم إرجاع بدايات ، وإلا
تم إرجاع 0. الحرف الأول من s في الموضع 1.

الطول(s)
ترجع طول السلسلة s.

تطابق(ريال سعودى)
تُرجع فهرس أول أطول تطابق للتعبير العادي r in
سلسلة s. إرجاع 0 إذا لم يكن هناك تطابق. كأثر جانبي ، RSTART تم تعيين ل
قيمة الإرجاع. طول على طول المباراة أو -1 إذا لم يكن هناك تطابق.
إذا تم مطابقة السلسلة الفارغة ، طول على 0 ، ويتم إرجاع 1 إذا
المباراة في المقدمة ، والطول (s) يتم إرجاع +1 إذا كانت المباراة في
الظهر.

الانقسام(ق ، ا ، ص) الانقسام(ق ، ا)
خيط s ينقسم إلى حقول عن طريق التعبير العادي r و الحقول
تحميلها في مجموعة A. يتم إرجاع عدد الحقول. انظر القسم 11
أدناه لمزيد من التفاصيل. لو r تم حذفه، FS .

sprintf (شكل ، إكسبريست)
ترجع سلسلة مكونة من قائمة expr بالنسبة الى شكل. راجع
وصف printf () أدناه.

الفرعية(ص ، ق ، ت) الفرعية(ص ، ق)
استبدال فردي ، مثل gsub () باستثناء استبدال واحد على الأكثر.

substr (ق ، أنا ، ن) substr (ق ، أنا)
إرجاع السلسلة الفرعية للسلسلة s، بدءًا من الفهرس i، من الطول n. إذا n
لاحقة s، ابتداء من الساعة i يتم إرجاع.

لخفض(s)
إرجاع نسخة من s مع تحويل جميع الأحرف الكبيرة إلى الأحرف الصغيرة.

توبر (s)
إرجاع نسخة من s مع تحويل جميع الأحرف الصغيرة إلى الأحرف الكبيرة.

وظائف حسابية

atan2 (ص ، س) أركتان y/x بين -pi و pi.

كوس (x) وظيفة جيب التمام ، x بالتقدير الدائري.

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

int (x) عائدات x مقطوع نحو الصفر.

سجل(x) اللوغاريتم الطبيعي.

rand () ترجع رقماً عشوائياً بين صفر وواحد.

الخطيئة (x) وظيفة الجيب ، x بالتقدير الدائري.

الجذر التربيعي (x) إرجاع الجذر التربيعي لـ x.

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

9. إدخال و الناتج
هناك نوعان من البيانات الإخراج ، طباعة و printf.

يكتب الطباعة $0 ORS لمعيار الإخراج.

طباعة على سبيل المثال1, على سبيل المثال2 ، ... ، على سبيل المثالn
يكتب على سبيل المثال1 OFS على سبيل المثال2 OFS على سبيل المثالn ORS لمعيار الإخراج. رقمي
يتم تحويل التعبيرات إلى سلسلة ذات OFMT.

printf شكل، قائمة expr
يكرر كتابة وظيفة مكتبة printf C إلى الإخراج القياسي. ال
يتم التعرف على مواصفات تنسيق ANSI C الكاملة مع التحويلات٪ c ،
٪ d و٪ e و٪ E و٪ f و٪ g و٪ G و٪ i و٪ o و٪ s و٪ u و٪ x و٪ X و ٪٪ والتحويل
المؤهلات h و l.

يمكن بشكل اختياري وضع قائمة الوسائط المطلوب طباعتها أو طباعتها بين قوسين. مطبعة
تنسيقات الأرقام باستخدام OFMT أو "٪ d" للأعداد الصحيحة بالضبط. "٪ c" مع وسيطة رقمية
يطبع الحرف 8 بت المقابل ، مع وسيطة سلسلة تطبع الأول
طابع السلسلة. يمكن إعادة توجيه إخراج print و printf إلى ملف أو
الأمر بإلحاق> ملف، >> ملف ذهب | أمر حتى نهاية بيان الطباعة.
تفتح إعادة التوجيه ملف or أمر مرة واحدة فقط ، يتم إلحاق عمليات إعادة التوجيه اللاحقة بـ
تيار مفتوح. بالإقناع، mawk يربط اسم الملف "/ ديف / ستدير"مع stderr التي
يسمح بإعادة توجيه print و printf إلى stderr. mawk يربط أيضا "-" و
"/ dev / stdout" مع stdin و stdout مما يسمح بتمرير هذه التدفقات إلى الوظائف.

وظيفة الإدخال الحصول على خط لديه الاختلافات التالية.

الحصول على خط
يقرأ في $0، تحديثات الحقول ، NF, NR و FNR.

الحصول على خط ملف
يقرأ في $0 تبدأ من ملفوتحديث الحقول و NF.

الحصول على خط فار
يقرأ السجل التالي في فارالتحديثات NR و FNR.

الحصول على خط فار < ملف
يقرأ السجل التالي من ملف إلى فار.

أمر | الحصول على خط
الأنابيب سجل من أمر إلى $0 وتحديث الحقول و NF.

أمر | الحصول على خط فار
الأنابيب سجل من أمر إلى فار.

يقوم Getline بإرجاع 0 في نهاية الملف ، و -1 عند الخطأ ، وإلا 1.

يتم تنفيذ الأوامر الموجودة في نهاية الأنابيب بواسطة / bin / sh.

وظيفة اغلق(على سبيل المثال) يغلق الملف أو الأنبوب المرتبط بـ على سبيل المثال. إغلاق إرجاع 0 إذا
على سبيل المثال هو ملف مفتوح ، حالة الخروج إذا على سبيل المثال هو أمر الأنابيب ، و -1 بخلاف ذلك. قريب
يستخدم لإعادة قراءة ملف أو أمر ، تأكد من انتهاء الطرف الآخر لأنبوب الإخراج
أو الحفاظ على موارد الملف.

وظيفة فلوش(على سبيل المثال) يمسح ملف الإخراج أو الأنبوب المرتبط بـ على سبيل المثال. فلاش
تُرجع 0 إذا كان على سبيل المثال هو تيار إخراج مفتوح وإلا -1. يتدفق دون جدال يتدفق
stdout. Fflush مع وسيطة فارغة ("") يقوم بمسح كل الإخراج المفتوح.

وظيفة نظام(على سبيل المثال) الاستخدامات / بن / ش ينفذ على سبيل المثال ويعيد حالة الخروج من
أمر على سبيل المثال. التغييرات التي تم إجراؤها على البيئة لا يتم تمرير المصفوفة إلى الأوامر المنفذة باستخدام
نظام أو الأنابيب.

10. مستخدم تعريف وظائف
بناء الجملة لوظيفة يحددها المستخدم هو

وظيفة الاسم ( وسائط ) { البيانات }

يمكن أن يحتوي جسم الوظيفة على بيان إرجاع

عائد أعلى opt_expr

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

دالة csplit (s، A، n، i)
{
ن = الطول (الأطوال)
لـ (i = 1 ؛ i <= n ؛ i ++) A [i] = substr (s ، i ، 1)
عودة
}

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

11. شق سلاسل، تسجيل و ملفات
تستخدم برامج Awk نفس الخوارزمية لتقسيم السلاسل إلى مصفوفات ذات تقسيم () وسجلات
في الحقول FS. mawk يستخدم أساسًا نفس الخوارزمية لتقسيم الملفات إلى سجلات
on RS.

انشق، مزق(expr ، أ ، سبتمبر) يعمل كالتالي:

(1) إذا سبتمبر تم حذفه ، يتم استبداله بـ FS. سبتمبر يمكن أن يكون تعبيرًا أو
تعبير عادي. إذا كان تعبيرًا عن نوع غير سلسلة ، فهو كذلك
تحويلها إلى سلسلة.

(2) إذا سبتمبر = "" (مسافة واحدة) ، إذن يتم قطعه من الأمام و
تراجع على سبيل المثالو سبتمبر يصبح . mawk يحدد كالعادة
تعبير / [\ t \ n] +/. غير ذلك سبتمبر يتم التعامل معه كتعبير عادي ،
باستثناء أنه يتم تجاهل الأحرف الوصفية لسلسلة طولها 1 ، على سبيل المثال ،
الانقسام (x، A، "*") والانقسام (x، A، / \ * /) متماثلان.

(3) إذا على سبيل المثال ليست سلسلة ، يتم تحويلها إلى سلسلة. لو على سبيل المثال ثم الفراغ
السلسلة "" ، تعرض split () 0 و A تم تعيينه فارغًا. خلاف ذلك ، كل غير
متداخلة وغير خالية وأطول تطابقات لـ سبتمبر in على سبيل المثال، منفصل على سبيل المثال إلى
الحقول التي يتم تحميلها فيها A. يتم وضع الحقول في A [1] ، A [2] ، ... ،
يُرجع A [n] و split () n ، وهو عدد الحقول الذي يمثل عدد
مباريات زائد واحد. البيانات الموضوعة في A التي تبدو رقمية يتم كتابتها رقم و
سلسلة.

يعمل تقسيم السجلات إلى حقول بالطريقة نفسها باستثناء تحميل القطع فيها $1, $2، ... ،
NF دولار. إذا $0 فارغ، NF تم تعيينه على 0 وجميع $i إلى "".

mawk يقسم الملفات إلى سجلات بنفس الخوارزمية ، ولكن مع اختلاف بسيط
RS هو حقًا فاصل بدلاً من فاصل. (ORS هو حقًا فاصل أيضًا).

على سبيل المثال ، إذا FS = ": +" و $0 = "أ :: ب:" ، إذن NF = 3 و $1 = "أ" ، $2 = "ب" و $3 =
"" ، ولكن إذا كانت "a :: b:" هي محتويات ملف الإدخال و RS = ": +" ، ثم هناك
سجلين "أ" و "ب".

RS = "" ليست خاصة.

If FS = "" إذن mawk يكسر السجل إلى أحرف فردية ، وبالمثل ،
الانقسام(ق ، ا ،"") يضع الأحرف الفردية لـ s إلى A.

12. متعدد الخطوط تسجيل
منذ mawk يفسر RS كتعبير عادي ، فإن التسجيلات متعددة الأسطر سهلة. ضبط RS
= "\ n \ n +" ، يجعل سطرًا فارغًا واحدًا أو أكثر يفصل بين السجلات. لو FS = "" (الافتراضي) ،
ثم أسطر جديدة واحدة ، وفقًا لقواعد أعلاه ، تصبح مساحة وأسطر جديدة مفردة
فواصل المجال.

على سبيل المثال ، إذا كان الملف "ab \ nc \ n \ n" ، RS = "\ n \ n +" و FS = "" ، إذن هناك
سجل واحد "ab \ nc" بثلاثة حقول "أ" و "ب" و "ج". التغيير FS = "\ n" يعطي
حقلين "أب" و "ج" ؛ المتغيرة FS = "" ، تعطي حقلاً واحدًا مطابقًا لملف
سجل.

إذا كنت تريد اعتبار الأسطر التي تحتوي على مسافات أو علامات تبويب فارغة ، فقم بتعيين RS = "\ n ([\ t] * \ n) +".
للتوافق مع أقواس أخرى ، الإعداد RS = "" لها نفس التأثير كما لو كانت سطور فارغة
يتم تجريد الملفات من الجزء الأمامي والخلفي ثم يتم تحديد السجلات كما لو كانت RS =
"\ n \ n +". يتطلب Posix أن "\ n" يفصل السجلات دائمًا عندما RS = "" بغض النظر عن
قيمة FS. mawk لا يدعم هذا الاصطلاح ، لأن تعريف "\ n" كـ
يجعلها غير ضرورية.

معظم الوقت عندما تتغير RS بالنسبة للسجلات متعددة الخطوط ، ستحتاج أيضًا إلى التغيير
ORS إلى "\ n \ n" بحيث يتم الاحتفاظ بتباعد السجلات عند الإخراج.

13. برنامج
يصف هذا القسم ترتيب تنفيذ البرنامج. أولا ARGC تم تعيينه إلى المجموع
عدد وسيطات سطر الأوامر التي تم تمريرها إلى مرحلة تنفيذ البرنامج. ARGV [0] is
تعيين اسم مترجم AWK و ARGV [1] ARGV [ARGC-1] يحمل الباقي
حجج سطر الأوامر باستثناء الخيارات ومصدر البرنامج. على سبيل المثال مع

mawk -f prog v = 1 A t = hello B

ARGC = 5 مع ARGV [0] = "mawk" ، ARGV [1] = "v = 1" ، ARGV [2] = "أ" ، ARGV [3] = "t = hello" و
ARGV [4] = "ب".

بعد ذلك ، كل ابدأ يتم تنفيذ الكتلة بالترتيب. إذا كان البرنامج يتكون بالكامل من ابدأ
كتل ، ثم ينتهي التنفيذ ، وإلا يتم فتح تدفق الإدخال ويستمر التنفيذ.
If ARGC يساوي 1 ، يتم تعيين دفق الإدخال على stdin ، وإلا فإن وسيطات سطر الأوامر
ARGV [1] ARGV [ARGC-1] يتم فحصها للحصول على حجة ملف.

تنقسم وسيطات سطر الأوامر إلى ثلاث مجموعات: وسيطات الملف ، وسيطات التعيين
وسلاسل فارغة "". مهمة لها الشكل فار=سلسلة. عندما ARGV [i] يتم فحصه
كوسيطة ملف محتملة ، إذا كانت فارغة يتم تخطيها ؛ إذا كانت مهمة
حجة الاحالة الى فار يحدث و i يتخطى الحجة التالية ؛ آخر ARGV [i]
مفتوح للإدخال. إذا فشل في الفتح ، ينتهي التنفيذ برمز الإنهاء 2. إذا لم يتم فتحه
وسيطة سطر الأوامر هي وسيطة ملف ، ثم تأتي المدخلات من stdin. Getline في أ ابدأ
يفتح العمل المدخلات. "-" كملف وسيطة تدل على stdin.

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

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

في المثال ، يتم إجراء المهمة v = 1 بعد ابدأ الإجراءات يتم إعدامهم ، و
يتم كتابة البيانات الموضوعة في v هو الرقم والسلسلة. ثم تتم قراءة المدخلات من الملف A. في النهاية
من الملف A ، يتم تعيين t على السلسلة "hello" ، ويتم فتح B للإدخال. في نهاية الملف ب ،
ال END الإجراءات يتم إعدامهم.

تدفق البرنامج في النمط {عمل} يمكن تغيير المستوى مع

التالي
خروج opt_expr

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

أمثلة


1. محاكاة القط.

{ مطبعة }

2. محاكاة مرحاض.

{chars + = length ($ 0) + 1 # أضف واحدًا لـ \ n
الكلمات + = NF
}

النهاية {print NR، words، chars}

3. عد عدد "الكلمات الحقيقية" الفريدة.

ابدأ {FS = "[^ A-Za-z] +"}

{لـ (i = 1؛ i <= NF؛ i ++) كلمة [$ i] = ""}

إنهاء {حذف كلمة [""]
لـ (i in word) cnt ++
طباعة cnt
}

4. اجمع الحقل الثاني من كل سجل بناءً على الحقل الأول.

1 دولار ~ / ائتمان | ربح / {sum + = $ 2}
1 دولار ~ / الخصم | الخسارة / {sum - = 2 $}

النهاية {print sum}

5. فرز ملف ، مقارنة كسلسلة

{line [NR] = $ 0 ""} # تأكد من نوع المقارنة
# في حالة ظهور بعض الخطوط رقمية

النهاية {isort (line، NR)
لـ (i = 1 ؛ i <= NR ؛ i ++) سطر الطباعة [i]
}

# الإدراج من نوع A [1..n]
دالة isort (A ، n ، i ، j ، عقد)
{
لـ (i = 2 ؛ i <= n ؛ i ++)
{
عقد = A [j = i]
بينما (A [j-1]> اضغط باستمرار)
{ي-- ؛ أ [ي + 1] = أ [ي]}
A [j] = عقد
}
# sentinel A [0] = "" سيتم إنشاؤه إذا لزم الأمر
}

التوافق قضايا


تعريف Posix 1003.2 (مسودة 11.3) للغة AWK هو AWK كما هو موصوف في AWK
كتاب مع بعض الامتدادات التي ظهرت في SystemVR4 nawk. الامتدادات هي:

وظائف جديدة: toupper () و tolower ().

المتغيرات الجديدة: ENVIRON [] و CONVFMT.

مواصفات تحويل ANSI C لـ printf () و sprintf ().

خيارات الأمر الجديدة: -v var = value وخيارات متعددة f وخيارات التنفيذ
كحجج لـ -W.

تم تصميم Posix AWK للعمل على ملفات سطر في وقت واحد. RS يمكن تغييرها من "\ n"
إلى حرف واحد آخر ، ولكن من الصعب العثور على أي فائدة لهذا - لا يوجد
أمثلة في كتاب AWK. بالإقناع، RS = "" ، لفصل سطر أو أكثر من الأسطر الفارغة
السجلات ، مما يسمح بسجلات متعددة الخطوط. متي RS = ""، "\ n" دائمًا فاصل حقل
بغض النظر عن القيمة في FS.

mawk، من ناحية أخرى ، يسمح RS ليكون تعبيرا عاديا. عندما تظهر "\ n" في
السجلات ، يتم التعامل معها على أنها مساحة ، و FS يحدد دائما الحقول.

يمكن أن تؤدي إزالة الخط في كل مرة إلى جعل بعض البرامج أبسط ويمكن تحسينها في كثير من الأحيان
أداء. على سبيل المثال ، إعادة المثال 3 من الأعلى ،

ابدأ {RS = "[^ A-Za-z] +"}

{كلمة [$ 0] = ""}

إنهاء {حذف كلمة [""]
لـ (i in word) cnt ++
طباعة cnt
}

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

يستبدل البرنامج التالي كل تعليق بمسافة واحدة في ملف برنامج سي ،

ابدأ {
RS = "/ \ * ([^ *] | \ * + [^ / *]) * \ * + /"
تعليق واحد هو فاصل التسجيلة
ORS = ""
Getline Hold
}

{تعليق الطباعة ؛ عقد = $ 0}

النهاية {printf "٪ s" ، اضغط باستمرار}

يلزم تخزين سجل واحد مؤقتًا لتجنب إنهاء السجل الأخير بمسافة.

بإضافة إلى mawk، كل ما يلي متكافئ ،

x ~ / a \ + b / x ~ "a \ + b" x ~ "a \\ + b"

يتم مسح الأوتار مرتين ، مرة كسلسلة ومرة ​​أخرى كتعبير عادي. على ال
مسح السلسلة ، mawk يتجاهل الهروب على الشخصيات غير الهروب بينما ينادي كتاب AWK
\c يتم التعرف عليها على أنها c مما يستلزم الهروب المزدوج للأحرف الوصفية في
سلاسل. يرفض Posix صراحةً تحديد السلوك الذي يفرض البرامج بشكل سلبي
التي يجب أن تعمل في ظل مجموعة متنوعة من الاستيقاظ لاستخدام ضعف قابلية التنقل ولكن أقل قابلية للقراءة
هرب.

لا يتعرف Posix AWK على "/ dev / std {out، err}" أو \ x تسلسل الهروب السداسي في السلاسل.
على عكس ANSI C ، mawk يحد من عدد الأرقام التي تلي \ x إلى اثنين كالتيار
يدعم التنفيذ أحرف 8 بت فقط. المدمج في فلوش ظهر لأول مرة في أ
تم إصدار AT&T awk مؤخرًا (1993) إلى netlib ، وهو ليس جزءًا من معيار posix.
تجميع الحذف مع حذف مجموعة ليس جزءًا من معيار posix.

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

أخيرًا ، إليك كيف mawk يتعامل مع الحالات الاستثنائية التي لم تتم مناقشتها في كتاب AWK أو
مشروع Posix. من غير الآمن افتراض التناسق عبر فترات الاستيقاظ ومن الآمن التخطي إلى التالي
والقسم الخاص به.

substr (s ، i ، n) ترجع أحرف s في تقاطع مغلق
الفاصل الزمني [1 ، الطول (الأطوال)] والفاصل الزمني نصف المفتوح [i ، i + n). عندما
التقاطع فارغ ، يتم إرجاع السلسلة الفارغة ؛ لذلك substr ("ABC"، 1، 0) = ""
والسلسلة الفرعية ("ABC"، -4، 6) = "أ".

كل سلسلة ، بما في ذلك السلسلة الفارغة ، تطابق السلسلة الفارغة في المقدمة ،
s ~ // و s ~ "" ، تكون دائمًا 1 كما هي مطابقة (مطابقات ، //) ومطابقة (مطابقات ، ""). الاخيرتين
طقم طول ل0.

الفهرس (s ، t) هو نفسه دائمًا المطابقة (s ، t1) حيث t1 هو نفسه t مع
هرب الحروف الأولية. ومن ثم فإن التناسق مع المطابقة يتطلب هذا الفهرس ("،")
تُرجع دائمًا 1. أيضًا الشرط ، الفهرس (s ، t)! = 0 إذا كان t فقط عبارة عن سلسلة فرعية
من s ، يتطلب فهرس ("" ، "") = 1.

إذا واجه getline نهاية الملف ، فإن getline var ، يترك var بدون تغيير. بصورة مماثلة،
عند الدخول إلى END أجراءات، $0، الحقول و NF لها قيمتها دون تغيير
السجل الأخير.

استخدم mawk عبر الإنترنت باستخدام خدمات onworks.net


Ad


Ad