الدليل العملي الشامل لأمر awk في لينكس

نظرة عامة

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

1. مبدأ عمل awk الأساسي واستخراج أعمدة محددة

للتطبيق العملي على أمر awk، سنقوم بإنشاء ملف نصي تجريبي يحتوي على اسم المستخدم، والمعرف (ID)، والمسمى الوظيفي مفصولة بمسافات.

cat « ‘EOF’ > sample_users.txt
user1 1001 Developer
user2 1002 Designer
user3 1003 Manager
EOF

باستخدام الأمر awk، نقوم باستخراج وطباعة الحقل الأول ($1) الذي يمثل اسم المستخدم، والحقل الثالث ($3) الذي يمثل المسمى الوظيفي من كل سطر في الملف، بالاعتماد على المسافة كفاصل افتراضي.
إذا لم يتم تحديد فاصل مخصص، فإن awk يقسم الحقول تلقائيًا بناءً على المسافات المتتالية أو علامات التبويب (Tabs).
⚙️ [الخيارات الرئيسية]

-F fs : يحدد فاصل حقول الإدخال (Field Separator).
-v var=val : يعين متغيرًا وقيمته الأولية للاستخدام داخل نص awk البرمجي قبل التنفيذ.
-f progfile : يحدد مسار الملف الذي يحتوي على كود سكريبت awk المراد تنفيذه.

awk ‘{print $1, $3}’ sample_users.txt

في ملف /etc/passwd المفصول بنقطتين متعامدتين (:)، نقوم بتحديد الفاصل باستخدام الخيار -F:، ثم نستخرج فقط الحقل الأول ($1) الذي يمثل اسم الحساب والحقل السادس ($6) الذي يمثل مسار الدليل الرئيسي (Home Directory)، ونعرض أول 5 أسطر.

awk -F: ‘{print $1, $6}’ /etc/passwd | head -n 5

2. تصفية البيانات المخصصة باستخدام الجمل الشرطية والمعاملات

سنقوم بإنشاء ملف تجريبي باسم server_resources.txt يحتوي على معدلات استخدام المعالج (CPU) والذاكرة (Memory) لكل خادم.

cat « ‘EOF’ > server_resources.txt
web-server 85 92
db-server 45 60
cache-server 92 40
backup-server 20 15
EOF

نقوم بتصفية الخوادم التي يتجاوز فيها معدل استخدام المعالج في الحقل الثاني ($2) نسبة 80% أو يساويها باستخدام تعبير شرطي، ثم طباعة اسم الخادم المقابل مع رسالة تحذيرية.
يفيد هذا الأسلوب بشكل كبير في تحديد موارد النظام التي تجاوزت الحد المسموح به.

awk ‘$2 >= 80 {print $1 " CPU 경고: " $2 “%”}’ server_resources.txt

باستخدام معامل العطف المنطقي AND (&&)، نقوم بتحديد وطباعة الخوادم التي تمثل خطورة، حيث يتجاوز فيها استخدام المعالج ($2) والذاكرة ($3) معًا نسبة 80% فأكثر.
يتيح لك تطبيق الشروط المركبة حصر الخوادم التي تجاوزت فيها عدة موارد الحدود الحرجة في آن واحد.

awk ‘$2 >= 80 && $3 >= 80 {print “위험 서버: " $1}’ server_resources.txt

3. الإحصاء وحساب المجاميع باستخدام المتغيرات المضمنة وكتل BEGIN/END

لتطبيق عمليات التجميع والإحصاء باستخدام awk، سننشئ ملفًا تجريبيًا باسم sales_data.txt يحتوي على أسماء المنتجات وقيم المبيعات.

cat « ‘EOF’ > sales_data.txt
Apple 5000
Banana 3000
Orange 4500
Grape 8000
EOF

باستخدام كتلة BEGIN، نقوم بطباعة رسالة بدء قبل معالجة محتوى الملف، ثم نجمع قيمة الحقل الثاني ($2) من كل سطر تراكميًا في المتغير sum.
وفي كتلة END التي تُنفذ بعد اكتمال معالجة جميع أسطر الملف، نقوم بحساب وطباعة إجمالي المبيعات ومتوسط المبيعات بالاعتماد على المتغير المضمن NR (إجمالي عدد السجلات/الأسطر).

awk ‘BEGIN {print “— 매출 집계 시작 —”} {sum += $2; print $1 “: " $2} END {print “——————-”; print “총 매출: " sum “원”; print “평균 매출: " sum/NR “원”}’ sales_data.txt

4. تحليل سجلات خوادم الويب في بيئة العمل وتصفية حركات المرور غير الطبيعية

للتدريب على تحليل سجلات خوادم الويب وتتبع الأخطاء، سنقوم بإنشاء ملف سجل تجريبي access.log بالصيغة القياسية لخوادم Nginx وApache.

cat « ‘EOF’ > access.log
192.168.1.10 - - [10/Oct/2026:10:00:01] “GET /index.html” 200 4502
192.168.1.11 - - [10/Oct/2026:10:00:02] “POST /login” 401 1024
192.168.1.12 - - [10/Oct/2026:10:00:03] “GET /api/data” 500 2048
192.168.1.10 - - [10/Oct/2026:10:00:04] “GET /dashboard” 200 8920
192.168.1.13 - - [10/Oct/2026:10:00:05] “POST /login” 401 1024
EOF

باستخدام معامل مطابقة التعبيرات النمطية (~)، نقوم بتصفية أسطر أخطاء العميل 4xx وأخطاء الخادم 5xx التي يبدأ فيها الحقل التاسع ($9) الخاص برمز حالة HTTP بالرقم 4 أو 5.
ومن السجلات المطابقة للشروط، نستخرج فقط عنوان IP المتصل ($1)، ومسار URI المطلوب ($7)، ورمز الحالة ($9) للتحقق السريع من المشكلات وحالات المرور غير الطبيعية.

awk ‘$9 ~ /^[45]/ {print $1, $7, $9}’ access.log

باستخدام المصفوفات الترابطية في awk‏ (ip[$1]++)، نقوم بحساب عدد الطلبات لكل عنوان IP، ثم نطبع الإجمالي التراكمي عبر حلقة تكرار في كتلة END، ونرتب النتائج تنازليًا حسب عدد الطلبات عبر تمريرها إلى الأمر sort -rn.
تُعد هذه التقنية من الأساليب العملية المتبعة لتحديد حركة المرور المفرطة أو محاولات الوصول غير الطبيعية الصادرة من عناوين IP معينة.

awk ‘{ip[$1]++} END {for (i in ip) print ip[i], i}’ access.log | sort -rn

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