أوامر Linux ومهارات Shell
awk: عندما تصبح الأعمدة برامج
awk هو ما تصل إليه عندما تصبح الأعمدة وحدة العمل: سجلات الوصول إلى nginx، /etc/passwd، إخراج df، أي شيء يعيش في الحقول. إنها لغة كاملة (المتغيرات، المصفوفات، الحساب، قواعد العمل النمطي) ترتدي ملابس ذات بطانة واحدة، وهو بالضبط التمويه الصحيح للطب الشرعي للسجلات. الحدود الصادقة: أي شيء تفعله بشكل مريح هو سطر واحد، وأي شيء يحتاج إلى صفحة من الكتل هو نص بايثون الذي لم يعترف بنفسه بعد.
النقاط الرئيسية
- تقسيم الحقل هو الخدعة الأساسية: awk -F: '$3 >= 1000 {print $1}' /etc/passwd يسرد المستخدمين الحقيقيين، ويتعامل -F'[,|]' مع محددات متعددة الأحرف عندما يتوقف القص بالفعل.
- العد باستخدام المصفوفات الترابطية: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure يحول أي سجل إلى جدول تكراري في سطر واحد.
- NR وNF يجيبان على أسئلة الملف: 'NR==1' هو سطر الرأس، و'{print NF}' يحسب الأعمدة لكل صف، ومقارنة NR بالقيم المحفوظة في ملف آخر تجد التكرارات والفجوات.
- استخراج المطابقة الإضافية هو الخبز اليومي: awk '/ 500 / {print $7, $9}' access.log يسحب صفحات الخطأ مع عناوين URL، ويتيح لك OFS إعادة طباعة $0 بعد تحرير حقل واحد دون إعادة كتابة السطر بنفسك.
- كتل BEGIN وEND هي المكان الذي يعيش فيه العمل المجمع: تقوم BEGIN بتعيين الفواصل، ويتم تشغيل القواعد الوسطى في كل سطر، وتطبع END الإجماليات؛ ثلاث كتل تقرأ بشكل جيد، وخمسة عبارة عن نص مقنع.
- الاقتباس هو العدو الحقيقي للعبارات المفردة: اقتباس مفرد للبرنامج، والاقتباس الحرفي المزدوج بداخله، وتذكر أن 7 دولارات داخل سلسلة الصدفة ذات علامات الاقتباس المزدوجة لا تصل أبدًا إلى مستوى الخطأ على الإطلاق.
- العمل الرقمي يحصل على LC_ALL=C: الفواصل المحلية في الأرقام والترتيبات الفردية تقلب المقارنات والفرز بشكل جانبي، وتثبيت اللغة هو سطر واحد يوفر فترة ما بعد الظهر.
- تعرف على الحد الأقصى: تنتقل الفواصل المقتبسة داخل ملف CSV، أو JSON المتداخلة، أو التنسيقات متعددة الأسطر ذات الحالة إلى Python؛ awk هو مشرط ويبقى واحدًا.
ملاحظة ميدانية
سطر واحد غريب يجمع أعمدة الدولار من سجل بفواصل محلية أنتج أرقامًا لم يتساءل عنها أحد حتى فتحت المحاسبة التقرير. انتقل LC_ALL=C إلى مكتبة الأسماء المستعارة لدينا في ذلك الأسبوع وبقي فيها.
أسئلة شائعة
محرج أم مقطوع لعمل الأعمدة؟
قص لفاصل ثابت واحد وقائمة أعمدة عادية؛ في اللحظة التي تظهر فيها الشروط، أو التعبير العادي، أو الحساب، أو المجاميع، وعند هذه النقطة يكون القطع خارج نطاق عمقه على أي حال.
كيف يمكنني جمع عمود أو متوسطه؟
التجميع في END: awk '{s += $5} END {print s, s/NR}' يضيف ومتوسطات الحقل خمسة عبر الأسطر؛ قم بإزالة آلاف الفواصل أولاً إذا قامت لغة ما بوضع فواصل في الأرقام.
لماذا تتصرف سطرتي الفردية بشكل مختلف على نظام التشغيل macOS؟
يقوم macOS بشحن POSIX awk بدون امتدادات GNU مثل -i inplace أو gensub؛ يمكن أن تفشل البرامج النصية التي تعمل على Linux بهدوء هناك، لذا احتفظ بسطر واحد على شكل POSIX أو احمل معك التحديق.
هل يمكن تحليل JSON بسهولة؟
ليس له معنى: لا يحتوي JSON على بنية عمود يفهمها awk ويتعطل اختراق regex للكائنات المتداخلة. استخدم jq، وهو شكل awk لـ JSON، أو وحدة Python json عندما تنمو المهمة.
كيف تساعدك Kinetikatech في أوامر linux ومهارات shell
باختصار: الأوامر وعادات البرمجة النصية التي تحدد ما إذا كان المسؤول يشغل الخادم أم يحاربه: البحث عن النصوص والعمليات وتحويلها ونقلها والإشراف عليها باستخدام الأدوات الموجودة في كل تثبيت أساسي. سلّمها إلى خدمة أمن خوادم لينكس و إدارة الخوادم لدينا وهي مغطاة: تقييم سليم وتنفيذ نظيف ومراقبة على مدار الساعة.