Awk: تعلم البرمجة النصية للقذيفة باستخدام الأمر الطرفي awk

Awk: تعلم البرمجة النصية للقذيفة باستخدام الأمر الطرفي awk

Awk: تعلم البرمجة النصية للقذيفة باستخدام الأمر الطرفي awk

يعد الأمر "awk" في أنظمة التشغيل الحرة من نوع جنو / لينكس أمرًا قويًا للغاية ، ويساعدنا في الحصول على تحكم أكبر عند معالجة البيانات من أوامر أو أوامر أخرى. اسم AWK مشتق من الأحرف الأولى من ألقاب مؤلفيها: ألفريد Aهو ، بيتر Wاينبيرجر وبريان Kإرنيغان.

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

مقدمة عن الأمر "awk"

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

الصيغة الأكثر شيوعًا هي: ملفات 'البرنامج' awk وحيث يمكن أن يكون 'البرنامج': النمط {الإجراء} النمط {الإجراء}. يقرأ الأمر إدخال الملف سطرًا واحدًا في كل مرة. تتم مقارنة كل صف بكل نمط بالترتيب ؛ لكل نمط يطابق الصف ، يتم تنفيذ الإجراء المقابل.

مثال بسيط مثل:

awk -F: '$1=="root" {print}' /etc/passwd

يسأل عن الحقل الأول إذا كان الجذر لكل سطر في / etc / passwd ويطبعه مع الأخذ في الاعتبار ":" مع -F: كفاصل مجال.

مثال تمهيدي Awk

أمثلة عملية

قائمة الأوامر الأكثر استخدامًا

عرض قائمة تستند إلى تاريخ محطة النظام المرتب من الأكثر استخدامًا إلى الأقل.

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

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

مثال 1: أمر Awk

رسم بياني (جدول) مع عدد الاتصالات لكل مضيف

قم بإنشاء رسم بياني يستند إلى نص ASCII يعرض العدد الإجمالي للاتصالات من المضيف إلى كل عنوان IP.

netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'

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

مثال 2: أمر Awk

قائمة الدلائل حسب الحجم

اطبع على الشاشة قائمة أدلة المسار الحالي من الأكبر إلى الأصغر مع إظهار الملصقات المقابلة لحجمها باستخدام الأحرف: g و m و k.

du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'

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

مثال 3: أمر Awk

إظهار حركة المرور من واجهة الشبكة

عرض استهلاك البيانات الواردة والصادرة عبر الإنترنت بالكيلو بايت (kb) لواجهة شبكة محددة.

while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done

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

الحصول على سلسلة أرقام فيبوناتشي

أنشئ قائمة بأرقام كمية X باتباع نمط فيبوناتشي مع إعطاء رقمين أساسيين ليتم تكوينهما.

seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'

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

مثال 5: أمر Awk

قائمة رسومية لهيكل الملف حسب الحجم

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

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

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

مثال 6: أمر Awk

سرد ملخصًا لأنواع الملفات في الدليل

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

find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g

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

مثال 8: أمر Awk

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

في المنشور التالي على Shell Scripting سنستكشف أوامر أخرى.

إذا كنت تريد معرفة المزيد عن الأمر "grep" ، فانتقل إلى هذا الرابط "ديبيان ويكيوإذا كنت ترغب في معرفة المزيد عن البرمجة النصية في شل في مدونتنا الخاصة، يمكنك إلقاء نظرة على إصداراتنا الأخرى حول هذا الموضوع ، من خلال النقر هنا: البرمجة النصية DesdeLinux


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   توكسيتو قال

    لم أفهم سوى المثال الأول ، ولا شيء آخر