كيفية طباعة نطاق من الأعمدة باستخدام الأمر `awk`

How Print Range Columns Using Awk Command



الأمر `awk` هو أحد الأوامر العديدة التي يمكن استخدامها لطباعة نطاق من الأعمدة من البيانات المجدولة في Linux. يمكن استخدام الأمر `awk` مباشرةً من الجهاز الطرفي عن طريق تنفيذ ملف البرنامج النصي` awk`. في هذا البرنامج التعليمي ، سنوضح لك كيفية طباعة مجموعة من الأعمدة من البيانات الجدولية.

مثال 1: طباعة نطاق من الأعمدة من إخراج أمر

سيطبع الأمر التالي الأعمدة الثاني والثالث والرابع من إخراج الأمر ، 'Ls -l '. هنا ، يتم ذكر أرقام الأعمدة بشكل صريح ، ولكن يظهر أمر أكثر فعالية لطباعة نفس نطاق الأعمدة في المثال التالي.







$ls -ال | awk '{print $ 2، $ 3، $ 4}'

يتم إنتاج الإخراج التالي بواسطة الأمر أعلاه.





مثال 2: اطبع نطاق الأعمدة من ملف باستخدام ملف ل حلقة

لمتابعة هذا المثال والأمثلة الأخرى في هذا البرنامج التعليمي ، قم بإنشاء ملف نصي باسم marks.txt بالمحتوى التالي :





المعرف CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

سيطبع الأمر 'awk' التالي أول ثلاثة أعمدة من marks.txt. ال ل تُستخدم التكرار الحلقي لطباعة قيم العمود ، وتتضمن الحلقة ثلاث خطوات. ال نف متغير يشير إلى العدد الإجمالي لحقول أو أعمدة الملف.

$قطmarks.txt
$awk '{لـ (أنا = 1 ؛ أنا<=NF-1;i++) printf $i' '; print ''}'marks.txt

سيتم إنتاج الإخراج التالي عن طريق تشغيل الأمر. يظهر الإخراج الطالب المعرفات وعلامات CSE203 و CSE102 .



مثال 3: اطبع نطاق الأعمدة عن طريق تحديد متغيرات البداية والنهاية

سيطبع الأمر 'awk' التالي الأعمدة الثلاثة الأولى من إخراج الأمر 'ls -l' من خلال تهيئة ابتداء و النهاية المتغيرات. هنا ، قيمة ابتداء المتغير هو 1 ، وقيمة النهاية المتغير هو 3. يتم تكرار هذه المتغيرات في حلقة for لطباعة قيم العمود.

$ls -ال | awk 'ابدأ {first = 1 ؛ الماضي = 3}
{لـ (أنا = أولاً ؛ أنا

سيظهر الإخراج التالي بعد تشغيل الأمر. يُظهر الإخراج قيم الأعمدة الثلاثة الأولى للمخرجات ، 'ls -l'.

مثال 4: طباعة نطاق من الأعمدة من ملف بالتنسيق

سيطبع الأمر 'awk' التالي أول ثلاثة أعمدة من marks.txt استخدام printf وفاصل مجال الإخراج ( OFS ). هنا ، تتضمن الحلقة for ثلاث خطوات ، وستتم طباعة ثلاثة أعمدة بالتسلسل من الملف. OFS يستخدم هنا لإضافة مسافة بين الأعمدة. عندما تكون قيمة العداد للحلقة (i) مساوية لـ النهاية متغير ، ثم يتم إنشاء سطر جديد ( n).

$قطmarks.txt
$awk -الخامس بداية=1 -الخامس نهاية=3 '{لـ (i = start؛ i<=end;i++) printf('%s%s',
$ i ، (i == end)؟ ' n': OFS)} '
marks.txt

سيتم إنشاء الإخراج التالي بعد تشغيل الأوامر أعلاه.

مثال 5: اطبع نطاق الأعمدة من ملف باستخدام جملة شرطية

سيطبع الأمر `awk` التالي العمودين الأول والأخير من الملف باستخدام حلقة for وعبارة if. هنا ، تتضمن الحلقة for أربع خطوات. ال ابتداء و النهاية يتم استخدام المتغيرات في البرنامج النصي لحذف العمودين الثاني والثالث من الملف باستخدام شرط if. يتم استخدام متغير OFS لإضافة مسافة بين الأعمدة ، ويستخدم متغير ORS لإضافة سطر جديد ( n) بعد طباعة العمود الأخير.

$قطmarks.txt
$awk -الخامس بداية=2 -الخامس نهاية=3 '{لـ (أنا = 1 ؛ أنا<=NF;i++)
إذا (i> = بدء && أنا<=end) continue;
else printf ('٪ s٪ s'، $ i، (i! = NF)؟ OFS: ORS)} '
marks.txt

سيظهر الإخراج التالي بعد تشغيل الأوامر أعلاه. يُظهر الإخراج العمود الأول والأخير من marks.txt.

مثال 6: طباعة نطاق الأعمدة من ملف باستخدام متغير NF

سيطبع الأمر `awk` التالي العمودين الأول والأخير من الملف باستخدام متغير NF. لا يتم استخدام حلقات أو عبارات شرطية لطباعة قيم العمود. NF يشير إلى عدد الحقول. هناك أربعة أعمدة في marks.txt. يحدد $ (NF-3) العمود الأول ، ويشير $ NF إلى العمود الأخير.

$قطmarks.txt
$awk '{print $ (NF-3)' '$ NF}'marks.txt

يتم إنتاج الإخراج التالي عن طريق تشغيل الأوامر أعلاه. يُظهر الإخراج العمود الأول والأخير من marks.txt.

مثال 7: طباعة نطاق الأعمدة من ملف باستخدام substr () والفهرس ()

ترجع الدالة index () موضعًا إذا كانت قيمة الوسيطة الثانية موجودة في قيمة الوسيطة الأولى. يمكن أن تأخذ الدالة substr () ثلاث وسيطات. الوسيطة الأولى هي قيمة سلسلة ، والوسيطة الثانية هي موضع البداية ، والوسيطة الثالثة هي الطول. تم حذف الوسيطة الثالثة لـ substr () في الأمر التالي. نظرًا لأن العمود يبدأ من 1 دولار في الأمر `awk` ، فإن الدالة index () ستعيد 3 دولارات ، وسيطبع الأمر من 3 دولارات إلى 4 دولارات.

$قطmarks.txt
$awk '{print substr ($ 0، index ($ 0، $ 3))}'marks.txt

سيتم إنتاج الإخراج التالي عن طريق تشغيل الأوامر أعلاه.

المثال 8: قم بطباعة نطاق من الأعمدة بالتتابع من ملف باستخدام printf

سيطبع الأمر 'awk' التالي الأعمدة الأولى والثانية والثالثة من marks.txt عن طريق تعيين مساحة كافية لـ 10 أحرف.

$قطmarks.txt
$awk '// {printf '٪ 10s٪ 10s٪ 10s n'، $ 1، $ 3، $ 2} 'marks.txt

سيتم إنتاج الإخراج التالي عن طريق تشغيل الأوامر أعلاه.

استنتاج

هناك طرق مختلفة لطباعة نطاق الأعمدة من إخراج الأمر أو ملف. يوضح هذا البرنامج التعليمي كيف يمكن للأمر `awk` أن يساعد مستخدمي Linux في طباعة المحتوى من البيانات المجدولة.