يمكن للجميع تعلم Linux Awk Command.

CCNA 200-301

CCNA 200-301

CCNP Enterprise

CCNP Enterprise

CCNP Security

CCNP Security

CCIE Enterprise Lab

CCIE Enterprise Lab

CCIE Security Lab

CCIE Security Lab

CCNP Service Provider

CCNP Service Provider

CCNP Data Center

CCNP Data Center

CCNP Collaboration

CCNP Collaboration

CCIE DC Lab

CCIE DC Lab

ic_r
ic_l
يمكن للجميع تعلم Linux Awk Command.
images

مقدمة

Awk هي أداة تحليل نصية قوية. بالمقارنة مع بحث grep وتحرير sed، فإن Awk قوية بشكل خاص عندما تقوم بتحليل البيانات وإنشاء التقارير. ببساطة، يقرأ Awk الملف سطرًا بسطر، ويستخدم المساحة كفاصل افتراضي لتقسيم كل سطر. ثم يتم تحليل الجزء المقطوع بواسطة SPOTO .

هناك 3 إصدارات مختلفة من awk: awk، nawk وgawk، لم يتم تحديدها على وجه التحديد، ويشار إليها عمومًا باسم gawk، وgawk هي نسخة GNU من AWK.

يأتي اسم AWK من الأحرف الأولى لمؤسسيه Alfred Aho وPeter Weinberger وBrian Kernighan. في الواقع، لدى AWK لغتها الخاصة: لغة برمجة AWK، والتي تم تعريفها رسميًا من قبل المبدعين الثلاثة بأنها "لغات مسح الأنماط ومعالجتها". تتيح لك إنشاء برامج قصيرة تقرأ ملفات الإدخال، وتصنف البيانات، وتعالج البيانات، وتجري حسابات على المدخلات، وتولد التقارير، بالإضافة إلى عدد لا يحصى من الميزات الأخرى.

تعليمات

أوك '{نمط + إجراء}' {أسماء الملفات}

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

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

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

1. اتصل بـ awk

هناك ثلاث طرق لاستدعاء awk

وضع سطر الأوامر

ملفات الإدخال الخاصة بـ 'الأوامر' Awk [-F field-separator]

من بينها، الأوامر هي أوامر awk حقيقية، و[-F field separators] اختيارية. ملفات الإدخال هي الملفات التي سيتم معالجتها.

في awk، في كل سطر من الملف، يُطلق على كل عنصر مفصول بفاصل نطاق اسم حقل. عادةً، في حالة فاصل النطاق غير المسمى -F، يكون فاصل النطاق الافتراضي عبارة عن مسافة.

2. وضع البرنامج النصي Shell

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

معادل للسطر الأول من البرنامج النصي shell: #!/bin/sh

يمكن استبداله بـ: #!/bin/awk

3. أدخل جميع أوامر awk في ملف منفصل ثم اتصل بـ:

Awk -f awk-script-file ملفات الإدخال

من بينها، يقوم الخيار -f بتحميل البرنامج النصي awk في ملف awk-script، وملف(ات) الإدخال هو نفسه المذكور أعلاه.

مثال للبدء

افترض أن ناتج last -n 5 هو كما يلي

#last -n 5 خذ فقط أول خمسة أسطر

نقاط الجذر/1 192.168.1.100 الثلاثاء 10 فبراير 11:21 لا يزال مسجلاً الدخول

نقطة الجذر/1 192.168.1.100 الثلاثاء 10 فبراير 00:46 - 02:28 (01:41)

نقطة الجذر/1 192.168.1.100 الاثنين 9 فبراير 11:41 - 18:30 (06:48)

دمتساي نقطة/1 192.168.1.100 الإثنين 9 فبراير 11:41 - 11:41 (00:00)

جذر tty1 الجمعة 5 سبتمبر 14:09 - 14:10 (00:01)

إذا تم عرض الحسابات الخمسة التي تم تسجيل الدخول إليها مؤخرًا فقط

#last -n 5 | awk '{طباعة $1}'

جذر

جذر

جذر

دمتساي

جذر

يكون سير عمل awk على هذا النحو: قراءة سجل مع تقسيم سطر جديد "n"، ثم تقسيم السجل على فاصل المجال المحدد، وملء الحقل، $0 لجميع المجالات، $1 للحقل الأول، $n يمثل المجال رقم n. فاصل المجال الافتراضي هو "مفتاح فارغ" أو "مفتاح"، لذا فإن $1 يعني المستخدم المسجل الدخول، و$3 يعني عنوان IP للمستخدم المسجل الدخول، وهكذا.

إذا تم عرض الحساب الذي يظهر /etc/passwd فقط

#cat /etc/passwd |awk -F ':' '{طباعة $1}'

جذر

شيطان

سلة المهملات

النظام

هذا مثال على awk+action، الذي ينفذ action{print $1} على كل سطر.

-F يحدد فاصل المجال ليكون ':'.

إذا تم عرض الحساب المقابل لـ /etc/passwd والحساب المقابل للحساب فقط، وتم فصل الحساب والواجهة بواسطة مفتاح Tab.

#cat /etc/passwd |awk -F ':' '{طباعة $1"t"$7}'

الجذر /bin/bash

الديمون /bin/sh

بن /بن/ش

النظام /bin/sh

إذا قمت فقط بعرض حساب /etc/passwd والواجهة المقابلة للحساب، وتم فصل الحساب والواجهة بفواصل، وإضافة اسم العمود، والواجهة في جميع الصفوف، وإضافة "blue, /bin/nosh" في السطر الأخير.

Cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'

الاسم، القشرة

الجذر، /bin/bash

الديمون، /bin/sh

بن، /bin/sh

النظام، /bin/sh

أزرق، /bin/nosh

يكون سير عمل awk على هذا النحو: أولاً، قم بتنفيذ BEGING، ثم اقرأ الملف، واقرأ سجلًا مع تقسيم السطر الجديد /n، ثم قسّم السجل على فاصل المجال المحدد، واملأ الحقل، $0 يعني جميع المجالات، $1 يمثل الحقل الأول، $n يمثل الحقل رقم n، ثم ابدأ الإجراء المقابل لوضع التنفيذ. ثم ابدأ في قراءة السجل الثاني... حتى تتم قراءة جميع السجلات، وأخيرًا عملية END.

ابحث عن جميع أسطر الكلمة الأساسية الجذرية في /etc/passwd

#awk -F: '/root/' /etc/passwd

الجذر:x:0:0:root:/root:/bin/bash

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

ابحث عن الدعم المنتظم، مثل البحث عن الجذر: awk -F: '/^root/' /etc/passwd

يحتوي البحث /etc/passwd على جميع أسطر الكلمة الأساسية الجذرية ويعرض الغلاف المقابل

# awk -F: '/root/{طباعة $7}' /etc/passwd

/bin/bash

هذا يحدد الإجراء {طباعة $7}

متغير مدمج في Awk

يحتوي Awk على عدد من المتغيرات المضمنة لتعيين معلومات البيئة. يمكن تغيير هذه المتغيرات. فيما يلي بعض المتغيرات الأكثر استخدامًا.

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

ترتيب معلمات سطر أوامر ARGV

يدعم ENVIRON استخدام متغيرات بيئة النظام في قائمة الانتظار

اسم الملف awk تصفح اسم الملف

FNR عدد السجلات لتصفح الملفات

يقوم FS بتعيين فاصل حقل الإدخال، وهو ما يعادل خيار سطر الأوامر -F

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

NR عدد السجلات المقروءة

فاصل حقل إخراج OFS

فاصل تسجيلات إخراج ORS

فاصل سجل التحكم RS

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

الإحصائيات /etc/passwd: اسم الملف، رقم السطر لكل سطر، عدد الأعمدة لكل سطر، محتوى السطر الكامل المقابل:

#awk -F ':' '{طباعة "اسم الملف:" اسم الملف "، رقم السطر:" NR "، الأعمدة:" NF "، محتوى السطر:" $0}' /etc/passwd

اسم الملف: /etc/passwd، Linenumber:1،Columns:7،linecontent:root:x:0:0:root:/root:/bin/bash

اسم الملف: /etc/passwd، عدد الأعمدة: 2، محتوى السطر: daemon: x:1:1:daemon:/usr/sbin:/bin/sh

اسم الملف: /etc/passwd، Linenumber:3، Columns:7، Linecontent:bin:x:2:2:bin:/bin:/bin/sh

اسم الملف:/etc/passwd، Linenumber:4،Columns:7،linecontent:sys:x:3:3:sys:/dev:/bin/sh

استخدم printf بدلاً من print لجعل الكود أكثر إيجازًا وسهل القراءة.

Awk -F ':' '{printf("اسم الملف:%10s، رقم السطر:%s، الأعمدة:%s، محتوى السطر:%sn"، اسم الملف، NR، NF، $0)}' /etc/passwd

طباعة وطباعة

يوفر Awk أيضًا وظيفة الطباعة وطباعة الإخراج printf.

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

دالة Printf، استخدامها مشابه بشكل أساسي لـ printf في لغة c. يمكنها تنسيق السلاسل. عندما يكون الناتج معقدًا، يكون استخدام printf أسهل ويكون فهم الكود أسهل.

برمجة Awk

المتغيرات والمهام

بالإضافة إلى المتغيرات المضمنة في awk، يمكن لـ awk أيضًا تخصيص المتغيرات.

يتم حساب عدد الحسابات الموجودة في /etc/passwd أدناه.

Awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd

الجذر:x:0:0:root:/root:/bin/bash

عدد المستخدمين 40

Count هو متغير مخصص. يحتوي الإجراء السابق {} على طباعة واحدة فقط. في الواقع، الطباعة عبارة عن جملة فقط، ويمكن أن يحتوي الإجراء {} على جمل متعددة مفصولة بـ ؛

لا يوجد عدد مبدئي هنا، على الرغم من أن الافتراضي هو 0، ولكن الممارسة الصحيحة هي التهيئة إلى 0:

Awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd

[البدء]عدد المستخدمين هو 0

الجذر:x:0:0:root:/root:/bin/bash

عدد المستخدمين النهائيين هو 40

حساب عدد البايتات التي تشغلها الملفات في مجلد

Ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{طباعة "[end]الحجم هو ", الحجم}'

الحجم النهائي هو 8657198

إذا تم عرضها في M:

Ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{طباعة "[end]الحجم هو ", size/1024/1024,"M"}'

الحجم النهائي هو 8.25889 م

لاحظ أن الإحصائيات لا تتضمن الدلائل الفرعية للمجلد.

عبارات شرطية

العبارات الشرطية في awk مستعارة من لغة C، كما هو موضح أدناه:

إذا (التعبير) {

إفادة

إفادة

}

إذا (التعبير) {

إفادة

} آخر {

بيان2؛

}

إذا (التعبير) {

بيان 1؛

} وإلا إذا (التعبير