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

ما هو أمر 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
في هذا المثال، لدينا أعمدة تمثل:
firstNamelastNameagecityID
ولعرض محتوى الملف بسرعة، يمكنك استخدام الأمر:
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، فستتمكن من معالجة كميات كبيرة من البيانات النصية بسرعة وكفاءة عالية.