Skip to main content

كيفية كتابة AWK الأوامر والنصوص

Important Linux Commands for Beginners: Linux Tutorial (قد 2025)

Important Linux Commands for Beginners: Linux Tutorial (قد 2025)
Anonim

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

بسيط AWK يمكن تشغيل الأوامر من سطر الأوامر. يجب كتابة مهام أكثر تعقيدًا مثل برامج awk (ما يسمى بـ awk scripts) إلى ملف.

الشكل الأساسي لأمر awk يبدو كالتالي:

awk 'pattern {action}' input-file> output-file

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

awk '{print $ 5}' table1.txt> output1.txt

تأخذ هذه العبارة عنصر العمود الخامس من كل سطر وتكتبه كسطر في ملف الإخراج "output.txt". يشير المتغير "$ 4" إلى العمود الثاني. وبالمثل ، يمكنك الوصول إلى العمود الأول والثاني والثالث ، مع $ 1 ، $ 2 ، $ 3 ، إلخ. افتراضياً ، يفترض أن تكون الأعمدة مفصولة بمسافات أو علامات تبويب (تسمى المساحة البيضاء). لذا ، إذا كان ملف الإدخال "table1.txt" يحتوي على هذه السطور:

1 ، جوستين تيمبرليك ، العنوان 545 ، السعر $ 7.302 ، تايلور سويفت ، العنوان 723 ، السعر $ 7.903 ، ميك جاغر ، العنوان 610 ، السعر $ 7.904 ، ليدي غاغا ، العنوان 118 ، السعر $ 7.305 ، جوني كاش ، العنوان 482 ، السعر 6.50 دولار6 ، إلفيس بريسلي ، العنوان 335 ، السعر $ 7.307، John Lennon، Title 271، Price $ 7.908 ، مايكل جاكسون ، العنوان 373 ، السعر 5.50 دولارًا

ثم يقوم الأمر بكتابة السطور التالية إلى ملف الإخراج "output1.txt":

545,723,610,118,482,335,271,373,

إذا كان فاصل الأعمدة شيء آخر غير المسافات أو علامات التبويب ، مثل الفاصلة ، فيمكنك تحديد ذلك في بيان awk كما يلي:

awk -F، '{print $ 3}' table1.txt> output1.txt

سيؤدي هذا إلى تحديد العنصر من العمود 3 من كل سطر إذا تم اعتبار الأعمدة مفصولة بفاصلة. لذلك ، سيكون الناتج في هذه الحالة كما يلي:

العنوان 545 العنوان 723 العنوان 610 العنوان 118 العنوان 482 العنوان 335 العنوان 271 العنوان 373

تسمى قائمة العبارات داخل الأقواس المتعرجة ('' {'،'} ') باسم كتلة. إذا وضعت تعبير شرطي أمام كتلة ، فسيتم تنفيذ العبارة داخل الكتلة فقط إذا كان الشرط صحيحًا.

awk '$ 7 == " $ 7.30" {print $ 3}' table1.txt

في هذه الحالة ، يكون الشرط $ 7 == " $ 7.30" ، مما يعني أن العنصر في العمود 7 يساوي 7.30 دولار. يتم استخدام الخط المائل العكسي أمام علامة الدولار لمنع النظام من تفسير 7 دولارات كمتغير ، وبدلاً من ذلك يأخذ علامة الدولار حرفياً.

إذن هذا البيان awk يطبع العنصر في العمود الثالث من كل سطر يحتوي على "7.30 دولار" في العمود 7.

يمكنك أيضًا استخدام التعبيرات العادية كشرط. فمثلا:

awk '/ 30 / {print $ 3}' table1.txt

السلسلة بين الشريحتين المائلتين ('/') هي التعبير العادي. في هذه الحالة ، هو مجرد سلسلة "30". هذا يعني أنه إذا كان السطر يحتوي على السلسلة "30" ، يقوم النظام بطباعة العنصر الموجود في العمود الثالث من ذلك السطر. سيكون الناتج في المثال أعلاه كالتالي:

تيمبرليك، غاغا، بريسلي،

إذا كانت عناصر الجدول أرقام awk يمكن تشغيل الحسابات عليها كما في هذا المثال:

awk '{print ($ 2 * $ 3) + $ 7}'

إلى جانب المتغيرات التي تصل إلى عناصر الصف الحالي ($ 1 ، $ 2 ، الخ) ، يوجد المتغير 0 $ الذي يشير إلى الصف (السطر) الكامل ، والمتغير NF الذي يحتفظ بعدد الحقول.

يمكنك أيضًا تحديد المتغيرات الجديدة كما في هذا المثال:

awk '{sum = 0؛ لـ (col = 1؛ col <= NF؛ col ++) sum + = $ col؛ مبلغ الطباعة } '

هذا يحسب ويطبع مجموع كل عناصر كل صف.

وكثيرا ما يتم الجمع بين تصريحات awk وأوامر sed.