المحتوى عن 'awk'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML5
  • CSS
    • Sass
    • إطار عمل Bootstrap
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • التسويق بالرسائل النصية القصيرة
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 1 نتيجة

  1. تتّبع الأدوات المساعدة في لينِكس فلسفة Unix من ناحية تصميمها عادةً، حيث يُوصى بأن تكون الأدوات صغيرة، أن تستخدم ملفّات نص مُجرَّد plain text للدخل input والخَرْج output، وأن تعمل بالأسلوب التركيبي modular manner، ونمتلك بسبب هذا الإرث legacy وظيفة رائعة لمعالجة النّصوص مع أدوات مثل sed وawk. سنناقش في هذا الدّرس awk، والتي هي لغة برمجة ومُعالِج نصوص على حدٍّ سواء يُمكن استخدامها للتعامل مع بيانات النّصوص بطرق مفيدة جدًّا، سنناقش هذا على Ubuntu 12.04 VPS ولكن ينبغي أن يعمل بنفس الطريقة على أي نظام لينِكس حديث. الصياغة الأساسية Basic Syntaxيتم تضمين الأمر awk افتراضيًّا في جميع أنظمة لينِكس الحديثة، لذا لن نحتاج إلى تثبيته لكي نبدأ باستخدامه. يكون awk مفيدًا أكثر عند التعامل مع ملفات نصيّة مُنسَّقة بطريقة متوقعة، فعلى سبيل المثال يكون ممتازًا في تحليل parsing والتعامل مع البيانات المجدولة، فهو يعمل على الأسطر سطرًا تلو الآخر وبالتكرار عبر كامل الملف. يستخدم awk افتراضيًّا الفواصل whitespaces (المسافات spaces، tabs، إلخ) للفصل بين الحقول، ولحسن الحظ تستخدم معظم ملفّات الإعدادات على نظام لينِكس هذه الصّيغة. الصيغة الأساسيّة لأمر awk هي: awk '/search_pattern/ { action_to_take_on_matches; another_action; }' file_to_parseنستطيع إمّا إزالة قسم البحث search أو قسم الإجراء action من أي أمر awk، إنّ الإجراء الافتراضي الذي يتم اتخاذه إن لم نقم بكتابة القسم “action” هو الطباعة “print”، والذي يقوم ببساطة بطباعة كافّة الأسطر الموافقة. إن لم نقم بكتابة القسم “search” يُنفِّذ awk الإجراء المُدرَج في كل سطر. أمّا إن قمنا بكتابتهما معًا فيستخدم awk قسم البحث search ليقرّر إذا ما كان السّطر الحالي يعكس النمط pattern المطلوب، ومن ثمّ يُنفِّذ الإجراءات على الأمور المُوافِقة له. استخدامات بسيطةنستطيع استخدام awk في أبسط أشكاله مثل cat ليطبع ببساطة جميع أسطر ملف نصّي على الشّاشة. فلنطبع ملف fstab لخادومنا، والذي يعرض أنظمة الملفّات filesystems التي يعرفها: awk '{print}' /etc/fstab# /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # proc /proc proc nodev,noexec,nosuid 0 0 # / was on /dev/vda1 during installation UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1لا يفيدنا هذا كثيرًا، فلنجرّب قدرات awk في ترشيح filtering البحث: awk '/UUID/' /etc/fstab# device; this may be used with UUID= as a more robust way to name devices UUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1وكما نرى يطبع awk الآن الأسطر التي تحتوي "UUID" فقط، بإمكاننا التخلّص من سطر التعليق comment غير المهم عن طريق تحديد أنّ "UUID" يجب أن تتواجد في بداية السّطر: awk '/^UUID/' /etc/fstabUUID=b96601ba-7d51-4c5f-bfe2-63815708aabd / ext4 noatime,errors=remount-ro 0 1نستطيع بشكل مشابه استخدام قسم الإجراء action لتحديد أي قطع من المعلومات نريد طباعتها، على سبيل المثال لطباعة العمود الأول فقط نستطيع كتابة: awk '/^UUID/ {print $1;}' /etc/fstabUUID=b96601ba-7d51-4c5f-bfe2-63815708aabdيمكننا الرجوع لكل عمود (لأنّها مفصولة بفراغ بينها) عن طريق متغيرات variables مرتبطة برقم عمودها، على سبيل المثال نستطيع الرجوع للعمود الأول بواسطة المتغير 1$، والرجوع لكامل السّطر بواسطة المتغير 0$. متغيرات awk الداخلية والتنسيق الموسع Expanded Formatيستخدم awk بعض المتغيّرات الدّاخليّة internal variables لتعيين قطع معيّنة من المعلومات بينما يقوم بمعالجة الملف. إنّ المتغيّرات الدّاخليّة التي يستخدمها awk هي: FILENAME: يُرجِع ملف الدّخل input الحالي.FNR: يُرجِع عدد التسجيلات record الحاليّة نسبة لملف الدّخل الحالي، على سبيل المثال إن كُنّا نملك ملفّين للدخل فسيخبرنا هذا المتغيّر بعدد التسجيلات لكل ملف بدلًا من أن يخبرنا بالمجموع الكلّي.FS: فاصل الحقل الحالي المُستخدَم للدلالة على كل حقل في التسجيل، يتم تعيينه افتراضيًّا إلى مسافة whitespace.NF: عدد الحقول في التسجيلات الحاليّة.NR: عدد التسجيلات الحاليّة.OFS: فاصل الحقل للبيانات المُخرَجة، يتم تعيينه افتراضيًّا إلى مسافة whitespace.ORS: فاصل التّسجيلات للبيانات المُخرَجة، وهو بشكل افتراضي سطر جديد.RS: فاصل التّسجيلات المُستخدَم لتمييز التّسجيلات المنفصلة في ملف الدّخل، وهو بشكل افتراضي سطر جديد.نستطيع تغيير قيم هذه المتغيّرات بحسب رغبتنا لتوافِق احتياجات ملفّاتنا، نقوم بذلك عادةً خلال طور التهيئة لمعالجة awk. يقودنا هذا إلى مفهوم هام آخر، إنّ صياغة awk مُعقَّدة أكثر بقليل ممّا شاهدناه في البداية، حيث توجد أيضًا كُتَل blocks اختياريّة BEGIN وEND والتي يُمكن أن تحتوي على أوامر ليتم تنفيذها قبل وبعد معالجة الملف على التوالي. يجعل هذا من صيغتنا المُوسَّعة تبدو مشابهة لما يلي: awk 'BEGIN { action; } /search/ { action; } END { action; }' input_fileإنّ الكلمات المفتاحيّة BEGIN وEND هي في الواقع مجرّد مجموعات مُحدّدة من الشّروط conditions تمامًا مثل مُعامِلات parameters البحث، فهي تتوافق مع الشّروط: قبل معالجة المستند وبعد معالجته. ويعني هذا أنّه بإمكاننا تغيير بعض المتغيّرات الداخليّة في القسم BEGIN، فعلى سبيل المثال الملف etc/passwd/ مفصول بواسطة نقطتين (:) بدلًا من مسافة، وإن أردنا طباعة العمود الأول من هذا الملف نستطيع كتابة ما يلي: sudo awk 'BEGIN { FS=":"; } { print $1; }' /etc/passwdroot daemon bin sys sync games man . . .نستطيع استخدام الكُتَل BEGIN وEND لطباعة معلومات بسيطة حول الحقول التي نطبعها: sudo awk 'BEGIN { FS=":"; print "User\t\tUID\t\tGID\t\tHome\t\tShell\n--------------"; } {print $1,"\t\t",$3,"\t\t",$4,"\t\t",$6,"\t\t",$7;} END { print "---------\nFile Complete" }' /etc/passwdUser UID GID Home Shell -------------- root 0 0 /root /bin/bash daemon 1 1 /usr/sbin /bin/sh bin 2 2 /bin /bin/sh sys 3 3 /dev /bin/sh sync 4 65534 /bin /bin/sync . . . --------- File Completeبإمكاننا كما نرى تنسيق الأشياء بشكل أنيق من خلال الاستفادة من بعض ميّزات awk. جميع الأقسام المُوسّعة اختياريّة، وفي الواقع القسم action الرئيسي بذاته اختياري إن تمّ تعريف قسم آخر، نستطيع أن نفعل أشياء من هذا القبيل كما يلي: awk 'BEGIN { print "We can use awk like the echo command"; }'We can use awk like the echo commandالبحث في الحقول والتعابير المركبة في awkقُمنا في أحد الأمثلة السّابقة بطباعة السّطر الذي يبدأ بـ "UUID" من الملف etc/fstab/، وكان هذا سهلًا لأنّنا كُنّا نبحث عن بداية السّطر بأكمله. ولكن ماذا لو أردنا معرفة إذا ما كان نمط البحث قد وافق بداية الحقل field بدلًا من ذلك؟ نستطيع إنشاء الملف favorite_food.txt الذي يضم قائمة تحوي رقم العناصر والأطعمة المفضّلة لمجموعة من الأصدقاء: echo "1 carrot sandy 2 wasabi luke 3 sandwich brian 4 salad ryan 5 spaghetti jessica" > favorite_food.txtإن كُنّا نريد إيجاد جميع الأطعمة التي تبدأ بـ “sa” من هذا الملف فبإمكاننا البدء بتجربة شيء مشابه لما يلي: awk '/sa/' favorite_food.txt1 carrot sandy 2 wasabi luke 3 sandwich brian 4 salad ryanقمنا هنا بالمطابقة مع أي مثال عن “sa” في الكلمة، وهذا لا يستثني كلمات مثل " wasabi" والتي تحوي هذا النمط في منتصفها، أو "sandy" غير الموجودة في العمود الذي نريده، فنحن مهتمون فقط بالكلمات التي تبدأ بـ “sa” والموجودة في العمود الثاني. بإمكاننا إخبار awk أن يُطابِق بداية العمود الثاني باستخدام هذا الأمر: awk '$2 ~ /^sa/' favorite_food.txt3 sandwich brian 4 salad ryanيسمح لنا هذا كما نرى بالبحث فقط في بداية العمود الثاني عن مُطابِق. يُخبِر الحرف "^" بأن يُحدِّد awk بحثه في بداية الحقل، ويُحدِّد الجزء "~field_num" بأنّه يجب فقط النّظر إلى العمود الثاني. يُمكننا بسهولة البحث عن الأشياء غير المُطابِقة بتضمين الحرف "!" قبل المَدّة tilde (~). سيعيد هذا الأمر جميع الأسطر التي لا تملك طعامًا يبدأ بـ “sa”: awk '$2 !~ /^sa/' favorite_food.txt1 carrot sandy 2 wasabi luke 5 spaghetti jessicaإن قرّرنا لاحقًا أنّنا فقط مهتمّون بالأسطر التي يكون فيها ما سبق صحيحًا ورقم العنصر أقل من 5، فنستطيع استخدام تعبير مُركَّب مثل هذا: awk '$2 !~ /^sa/ && $1 < 5' favorite_food.txtيُقدِّم لنا هذا بعض الأشياء الجديدة، أوّلها هو القدرة على إضافة مُتطلّبات إضافيّة للسطر الذي نريد مُطابقته باستخدام العامل operator &&، نستطيع باستخدام هذا جمع عدد كيفي من الشّروط للسطر الذي نريد مُطابقته. نستخدم هذا العامل لإضافة التحقّق من أنّ قيمة العمود الأوّل أقل من 5. الخاتمةيجب أن يكون لدينا الآن فكرة أساسيّة حول كيفيّة قيام awk بالتعامل مع تنسيق، وطباعة الملفّات النّصيّة بانتقائيّة، رغم ذلك فإنّ awk موضوع أكبر من هذا بكثير، وهو في الواقع لغة برمجة كاملة تحتوي على إسناد للمتغيّرات، بُنى التّحكّم control structures، دوال مُضمَّنة built-in functions، والمزيد من ذلك، ويُمكن استخدامه في scripts لتنسيق النصوص بطريقة مقروءة بسهولة. ولتعلّم المزيد حول كيفيّة العمل مع awk تحقّق من الموارد الكبيرة له على الإنترنت، واقرأ عن gawk وهو إصدار GNU من awk الموجود على توزيعات لينِكس الحديثة. ترجمة -وبتصرّف- لـ How To Use the AWK language to Manipulate Text in Linux لصاحبه Justin Ellingwood.