يعد الأمر "awk" في أنظمة التشغيل الحرة من نوع جنو / لينكس أمرًا قويًا للغاية ، ويساعدنا في الحصول على تحكم أكبر عند معالجة البيانات من أوامر أو أوامر أخرى. اسم AWK مشتق من الأحرف الأولى من ألقاب مؤلفيها: ألفريد Aهو ، بيتر Wاينبيرجر وبريان Kإرنيغان.
يوفر هذا الأمر لغة برمجة نصية لمعالجة النص يمكننا من خلالها: تحديد المتغيرات ، واستخدام السلاسل والمعاملات الحسابية ، واستخدام التحكم في التدفق والدورات ، وإنشاء تقارير منسقة. في الواقع ، Awk هو أكثر من مجرد أمر معالجة نمط ، إنه لغة تحليل دلالي كاملة.
مقدمة عن الأمر "awk"
كانت AWK واحدة من أولى أدوات وحدة التحكم الشائعة جدًا لإدارة (معالجة / استخراج) البيانات من خلال زيادة وظائف خطوط أنابيب UNIX. تعد اللغة التي توفرها هذه الأداة حاليًا معيارًا في جميع أنظمة التشغيل الحديثة التي تشبه UNIX تقريبًا ، لدرجة أنها جزء من مواصفات UNIX الأساسية ، لذلك عادةً ما يتم تثبيتها بالفعل في معظمها افتراضيًا.
الصيغة الأكثر شيوعًا هي: ملفات 'البرنامج' awk وحيث يمكن أن يكون 'البرنامج': النمط {الإجراء} النمط {الإجراء}. يقرأ الأمر إدخال الملف سطرًا واحدًا في كل مرة. تتم مقارنة كل صف بكل نمط بالترتيب ؛ لكل نمط يطابق الصف ، يتم تنفيذ الإجراء المقابل.
مثال بسيط مثل:
awk -F: '$1=="root" {print}' /etc/passwd
يسأل عن الحقل الأول إذا كان الجذر لكل سطر في / etc / passwd ويطبعه مع الأخذ في الاعتبار ":" مع -F: كفاصل مجال.
أمثلة عملية
قائمة الأوامر الأكثر استخدامًا
عرض قائمة تستند إلى تاريخ محطة النظام المرتب من الأكثر استخدامًا إلى الأقل.
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
على سبيل المثال:
رسم بياني (جدول) مع عدد الاتصالات لكل مضيف
قم بإنشاء رسم بياني يستند إلى نص 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 "" }'
على سبيل المثال:
قائمة الدلائل حسب الحجم
اطبع على الشاشة قائمة أدلة المسار الحالي من الأكبر إلى الأصغر مع إظهار الملصقات المقابلة لحجمها باستخدام الأحرف: 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}'
على سبيل المثال:
إظهار حركة المرور من واجهة الشبكة
عرض استهلاك البيانات الواردة والصادرة عبر الإنترنت بالكيلو بايت (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}'
على سبيل المثال:
قائمة رسومية لهيكل الملف حسب الحجم
احصل على قائمة بجميع المجلدات الموجودة في جذر نظام التشغيل مع الرسم (الأشرطة) والتمثيل الرقمي كنسبة مئوية من حجمها داخله.
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"}'
على سبيل المثال:
سرد ملخصًا لأنواع الملفات في الدليل
اعرض قائمة بأنواع الملفات الموجودة في دليل مع عدد الملفات التي تتوافق معها.
find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g
على سبيل المثال:
هذه الأمثلة لأسطر الأوامر باستخدام الأمر awk آمل أن تجدها مفيدة جدًا. ويتم استخدامها لاستخدامها مباشرة من وحدة التحكم أو بشكل غير مباشر عن طريق إدراجها في برنامج نصي (مهمة آلية).
في المنشور التالي على Shell Scripting سنستكشف أوامر أخرى.
إذا كنت تريد معرفة المزيد عن الأمر "grep" ، فانتقل إلى هذا الرابط "ديبيان ويكيوإذا كنت ترغب في معرفة المزيد عن البرمجة النصية في شل في مدونتنا الخاصة، يمكنك إلقاء نظرة على إصداراتنا الأخرى حول هذا الموضوع ، من خلال النقر هنا: البرمجة النصية DesdeLinux
لم أفهم سوى المثال الأول ، ولا شيء آخر