أمر AWK في Linux: شرح الصيغة الأساسية وأهم أمثلة الاستخدام في Linux وUnix

دقائق القراءة: 6

مقدمة إلى أمر AWK في Linux

يُعد awk واحدًا من أهم أدوات معالجة النصوص في بيئات Linux وUnix، وهو مفيد جدًا عند العمل من خلال سطر الأوامر. إذا كنت تتعامل مع ملفات نصية تحتوي على بيانات مرتبة في أعمدة أو أسطر، فإن awk يمنحك وسيلة سريعة ومرنة لاستخراج المعلومات، والبحث عن أنماط محددة، وطباعة أجزاء معينة من المحتوى بدقة.

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

شرح أمر AWK في Linux لمعالجة النصوص واستخراج الأعمدة والبحث بالأنماط

ما هو أمر AWK؟

أمر awk هو لغة scripting مصممة لمعالجة النصوص وتحليل البيانات النصية داخل الطرفية. ويُستخدم على نطاق واسع للبحث داخل الملفات، واستخراج أعمدة معينة، وتطبيق شروط منطقية على السطور، بالإضافة إلى التعامل مع regular expressions بكفاءة.

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

الصيغة الأساسية لأمر AWK

في أبسط صورة، تأتي صيغة الأمر بالشكل التالي:

awk '{action}' your_file_name.txt

أما إذا أردت البحث عن نص يطابق نمطًا محددًا، فتكون الصيغة:

awk '/regex pattern/{action}' your_file_name.txt

الفكرة هنا بسيطة:

  • pattern: النمط الذي تريد البحث عنه.
  • action: الإجراء الذي تريد تنفيذه عند تحقق النمط.
  • your_file_name.txt: اسم الملف النصي المستهدف.

كيفية إنشاء ملف تجريبي للعمل على AWK

لإنشاء ملف جديد من خلال سطر الأوامر، يمكنك استخدام أمر touch:

touch filename.txt

بعد ذلك يمكنك فتح الملف عبر محرر نصوص وإضافة المحتوى الذي تريد اختباره. لنفترض أن لدينا ملفًا باسم information.txt يحتوي على بيانات منظمة في أعمدة:

fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A

في هذا المثال، لدينا أعمدة تمثل:

  • firstName
  • lastName
  • age
  • city
  • ID

ولعرض محتوى الملف بسرعة، يمكنك استخدام الأمر:

cat information.txt

طباعة كامل محتوى الملف باستخدام AWK

إذا أردت طباعة جميع محتويات الملف كما هي، فاستخدم print $0. هذا الرمز يشير إلى السطر كاملًا.

awk '{print $0}' information.txt

الناتج:

fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A

طباعة الملف مع ترقيم الأسطر

يمكنك استخدام المتغير الداخلي NR لعرض رقم كل سطر:

awk '{print NR,$0}' information.txt

الناتج:

1 fristName lastName age city ID
2 Thomas Shelby 30 Rio 400
3 Omega Night 45 Ontario 600
4 Wood Tinker 54 Lisbon N/A
5 Giorgos Georgiou 35 London 300
6 Timmy Turner 32 Berlin N/A

طباعة أعمدة محددة باستخدام AWK

من أبرز استخدامات awk القدرة على استخراج أعمدة بعينها من ملف نصي. كل عمود يُشار إليه بواسطة $ متبوعًا برقم الحقل.

طباعة العمود الأول

awk '{print $1}' information.txt

الناتج:

fristName
Thomas
Omega
Wood
Giorgos
Timmy

طباعة العمود الثاني

awk '{print $2}' information.txt

الناتج:

lastName
Shelby
Night
Tinker
Georgiou
Turner

يعتمد awk افتراضيًا على المسافة space للفصل بين الحقول، لذلك يستطيع التعرف على الأعمدة تلقائيًا في الملفات النصية البسيطة.

طباعة أكثر من عمود

إذا أردت طباعة العمودين الأول والرابع معًا:

awk '{print $1, $4}' information.txt

الناتج:

fristName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy Berlin

طباعة آخر عمود في كل سطر

يمكنك استخدام $NF للإشارة إلى آخر حقل في السطر:

awk '{print $NF}' information.txt

الناتج:

ID
400
600
N/A
300
N/A

طباعة أسطر محددة من عمود معيّن

إذا أردت استخراج عمود محدد ثم عرض عدد معيّن من الأسطر، يمكنك دمج awk مع أوامر أخرى مثل head.

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

awk '{print $1}' information.txt | head -1

الناتج:

fristName

عرض أول سطرين من العمود الأول

awk '{print $1}' information.txt | head -2

الناتج:

fristName
Thomas

في هذا المثال، يقوم awk بطباعة العمود الأول، ثم يمرر الناتج عبر pipe إلى أمر head الذي يحدد عدد الأسطر المعروضة.

البحث عن أسطر تطابق نمطًا محددًا

من أقوى مزايا awk أنه يسمح لك بالبحث داخل النصوص باستخدام أنماط واضحة ومرنة.

طباعة الأسطر التي تبدأ بحرف معيّن

لطباعة أي سطر يبدأ بالحرف O:

awk '/^O/' information.txt

الناتج:

Omega Night 45 Ontario 600

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

طباعة الأسطر التي تنتهي بنمط معين

لطباعة الأسطر التي تنتهي بالرقم 0:

awk '/0$/' information.txt

الناتج:

Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300

هنا يشير الرمز $ إلى نهاية السطر.

استبعاد الأسطر التي تنتهي بنمط معين

إذا أردت عكس النتيجة، فاستخدم العامل !:

awk '! /0$/' information.txt

الناتج:

fristName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A

استخدام regular expressions في AWK

يسمح awk باستخدام regular expressions للبحث عن كلمات أو أسطر تحتوي على أنماط نصية محددة.

البحث عن نص يحتوي على حروف معيّنة

إذا أردت العثور على الأسطر التي تحتوي على io:

awk '/io/{print $0}' information.txt

الناتج:

Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300

مثال على ملف يحتوي على عمود إضافي

لنفترض أن الملف يتضمن عمودًا إضافيًا باسم department:

fristName lastName age city ID department
Thomas Shelby 30 Rio 400 IT
Omega Night 45 Ontario 600 Design
Wood Tinker 54 Lisbon N/A IT
Giorgos Georgiou 35 London 300 Data
Timmy Turner 32 Berlin N/A Engineering

عرض جميع السجلات التي تحتوي على IT

awk '/IT/' information.txt

الناتج:

Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A IT

عرض الاسم الأول واسم العائلة فقط لمن يعملون في IT

awk '/IT/{print $1, $2}' information.txt

الناتج:

Thomas Shelby
Wood Tinker

بهذه الطريقة، يمكنك دمج شرط البحث مع اختيار أعمدة معيّنة دون طباعة السطر بالكامل.

استخدام escape character داخل النمط

أحيانًا تحتاج إلى استخدام escape character عند البحث عن أنماط تحتوي على رموز خاصة، مثل N/A:

awk '/N\/A$/' information.txt

الناتج:

Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A

تم استخدام \ قبل الشرطة المائلة داخل النمط حتى لا يتسبب التعبير في خطأ نحوي.

استخدام معاملات المقارنة في AWK

لا يقتصر دور awk على البحث النصي فقط، بل يمكنك أيضًا استخدام معاملات المقارنة لتصفية البيانات بناءً على قيم رقمية أو شروط منطقية.

عرض السجلات التي يقل فيها العمر عن 40

awk '$3 < 40 { print $0 }' information.txt

الناتج:

Thomas Shelby 30 Rio 400
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A

في هذا المثال، يشير $3 إلى عمود age، ويتم طباعة السطر كاملًا فقط إذا كانت القيمة أقل من 40.

أفضل استخدامات AWK في معالجة النصوص

إذا كنت تعمل يوميًا مع ملفات نصية أو مخرجات أوامر النظام، فإن awk يمكن أن يساعدك في:

  • استخراج أعمدة محددة من الملفات.
  • تصفية السجلات بناءً على نمط أو شرط.
  • تحليل ملفات السجلات log files.
  • تنسيق المخرجات النصية لتسهيل قراءتها.
  • إجراء عمليات سريعة دون الحاجة إلى كتابة برنامج كامل.

نصائح عملية للاستفادة من AWK بكفاءة

  • ابدأ بالأوامر البسيطة مثل print $1 وprint $0 قبل الانتقال إلى الشروط الأكثر تعقيدًا.
  • احرص على فهم بنية الملف النصي وعدد الأعمدة قبل كتابة الأمر.
  • استخدم NR وNF كثيرًا، فهما من أكثر المتغيرات الداخلية فائدة.
  • ادمج awk مع أوامر مثل cat وhead وgrep وsort لبناء تدفقات عمل أكثر قوة.
  • اختبر regular expressions بعناية، خاصة عندما تتعامل مع رموز خاصة تحتاج إلى escape.

الخلاصة التقنية

يُعد awk من الأدوات الأساسية التي يجب أن يتقنها أي مستخدم أو مسؤول نظام يعمل على Linux وUnix. قوته الحقيقية تكمن في الجمع بين البساطة والمرونة؛ إذ يمكنك من خلال أوامر قصيرة تنفيذ عمليات دقيقة على النصوص والبيانات المهيكلة. وإذا أتقنت الأساسيات مثل الحقول، والأنماط، وregular expressions، فستتمكن من معالجة كميات كبيرة من البيانات النصية بسرعة وكفاءة عالية.

اترك تعليقاً

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