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

أوامر ، بناء جملة ، وأمثلة

يعد أمر 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.30 2، Taylor Swift، Title 723، السعر $ 7.90 3، Mick Jagger، Title 610، السعر $ 7.90 4، Lady Gaga، العنوان 118، السعر $ 7.30 5، Johnny Cash، Title 482، السعر $ 6.50 6، Elvis Presley، Title 335، Price $ 7.30 7، John Lennon، Title 271، Price $ 7.90 8، Michael Jackson، Title 373، Price $ 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 .