نظرة عامة
توفر بيئة لينكس أدوات سريعة لمعالجة النصوص، ويأتي الأمر comm في مقدمتها لتحليل الفروق والتقاطعات بين ملفين نصيين بدقة متناهية. يستعرض هذا الدليل التطبيقي هندسة الإخراج المكونة من ثلاثة أعمدة، وكيفية توظيف خيارات الحجب لعزل العناصر المشتركة أو المستقلة، إلى جانب معالجة البيانات غير المرتبة وسيناريوهات الفحص الواقعية لإدارة الأنظمة.
1. الآلية الأساسية للأمر comm وفهم مخرجات الأعمدة الثلاثة
نبدأ بتهيئة مجلد مخصص للتجارب الميدانية والانتقال إليه مباشرة عبر تنفيذ الأمر mkdir -p ~/comm_lab && cd ~/comm_lab.

يتطلب أمر الفحص نصوصاً مرتبة أبجدياً؛ لذا ننشئ الملف النموذجي الأول fruits_a.txt بتشغيل الأمر printf "apple\nbanana\ncherry\nmango\n" > fruits_a.txt.

لإجراء المقابلة، ننشئ الملف المرجعي الثاني fruits_b.txt الذي يضم تقاطعات واختلافات باستخدام الأمر printf "banana\ncherry\norange\nwatermelon\n" > fruits_b.txt.

يعتمد comm على مقارنة الأسطر بالتسلسل بين ملفين مرتبين مسبقاً، حيث يقوم بتوزيع النتائج عبر تنسيق بصري من ثلاثة أعمدة:
يمثل العمود الأول (بدون مسافة بادئة) الأسطر المنفردة في الملف الأول، ويعرض العمود الثاني (بإزاحة جدولية واحدة) الأسطر الحصرية للملف الثاني، في حين يجمع العمود الثالث (بإزاحتين) الأسطر المتطابقة والموجودة في كلا الملفين معاً.
⚙️ [أهم الخيارات التشغيلية]
-1 : كتم وحجب البيانات الفريدة الخاصة بالملف الأول (إخفاء العمود 1).-2 : كتم وحجب البيانات الفريدة الخاصة بالملف الثاني (إخفاء العمود 2).-3 : حجب وتجاوز السجلات المتطابقة والمشتركة بين الملفين (إخفاء العمود 3).--check-order : التحقق الصارم من الترتيب التصاعدي للأبيات داخل الملفات المدخلة.--nocheck-order : إلغاء التحقق من الترتيب الأبجدي والسماح بفحص الملفات مباشرة.--output-delimiter=STR : اعتماد فاصل مخصص (STR) لتقسيم الأعمدة كبديل لمحرف الإزاحة الافتراضي (Tab).

2. استخراج التقاطعات والفروق بتمرير المعاملات الرقمية
للعودة إلى مسار البيانات والتأكد من بيئة الاختبار، ننفذ الأمر cd ~/comm_lab.

عند الرغبة في استخراج التقاطع الحسابي فقط (الأسطر المتطابقة)، يؤدي استخدام comm -12 إلى حجب العمودين الأول والثاني، مما يُبقي فقط مدخلات banana وcherry.

لعزل العناصر التي ينفرد بها الملف الأول حصراً، نستبعد العمودين الثاني والثالث بتشغيل comm -23، وتكون النتيجة ظهور apple وmango فقط من محتوى fruits_a.txt.

بالمقابل، لاستعراض ما يميز الملف الثاني دون سواه، نقوم بحجب العمودين الأول والثالث عبر الأمر comm -13، فنحصل على orange وwatermelon المتواجدين في fruits_b.txt.

3. التعامل مع البيانات غير المرتبة عبر استبدال العمليات في Bash
نبدأ مرحلة معالجة الملفات العشوائية بالتحقق من مسار العمل بواسطة الأمر cd ~/comm_lab.

ننشئ أول ملف يحتوي على نصوص غير مرتبة تصاعدياً باسم unsorted_a.txt من خلال الأمر printf "zebra\napple\ngrape\n" > unsorted_a.txt.

نتبع ذلك بإنشاء الملف الثاني غير المنظم unsorted_b.txt عبر تنفيذ printf "apple\norange\nzebra\n" > unsorted_b.txt.

لتفادي التعديل على الملفات الأصلية أو حفظ ملفات مؤقتة على القرص، نستعين بتقنية استبدال العمليات في شل Bash بتنفيذ comm <(sort unsorted_a.txt) <(sort unsorted_b.txt). هذا الأسلوب يفرز البيانات في الذاكرة لحظياً ثم يمرر مجاري البيانات إلى أمر المقارنة. وتُعرض النتيجة منظمة: grape خاص بالملف الأول، orange يتبع الملف الثاني، في حين يقع apple وzebra ضمن المشتركات.

وللحصول على العناصر المشتركة فقط من تلك المدخلات غير المنظمة، ندمج معامل الحجب مع الترتيب الفوري عبر comm -12 <(sort unsorted_a.txt) <(sort unsorted_b.txt)، لنستخلص apple وzebra مباشرة بدون خطوات تخزين وسيطة.

4. تطبيقات عملية: تدقيق حزم الخوادم والفرز مع تجاهل حالة الأحرف
نعاود التأكيد على التواجد داخل دليل العمل التنفيذي عبر الأمر cd ~/comm_lab.

لمحاكاة مهام مسؤولي الأنظمة في مقارنة حزم البرمجيات، ننشئ قائمة الحزم المثبتة في الخادم الأول server1_pkgs.txt بواسطة printf "curl\ngit\nnginx\nvim\n" > server1_pkgs.txt.

بعدها ننشئ قائمة الحزم المناظرة للخادم الثاني server2_pkgs.txt بتشغيل printf "docker\ngit\npython3\nvim\n" > server2_pkgs.txt.

عند الحاجة لمعرفة الاختلافات البرمجية الصافية بين الخادمين، نلغي المشتركات بتطبيق comm -3 server1_pkgs.txt server2_pkgs.txt. يُسقط هذا الإجراء كلاً من git وvim، مبرزاً فقط انفراد الخادم الأول بـ curl وnginx والخادم الثاني بـ docker وpython3.

لاختبار سلوك الفرز مع تفاوت حالة الأحرف الكبيرة والصغيرة، نولد ملفاً أولياً mixed_a.txt بتنفيذ printf "Apple\nBANANA\ncherry\n" > mixed_a.txt.

وننشئ الملف المناظر الثاني بحالات أحرف مختلفة mixed_b.txt عبر printf "apple\nbanana\nCHERRY\n" > mixed_b.txt.

نقوم بدمج خيار الفرز غير الحساس للأحرف sort -f وتجاوز تنبيهات التحقق من الترتيب عبر comm -12 --nocheck-order <(sort -f mixed_a.txt) <(sort -f mixed_b.txt). نظراً لأن comm يقارن المحتوى على مستوى البايت بدقة حرفية، فإن اختلاف حالة الأحرف يجعل الأسطر متباينة تقنياً، مما يؤدي إلى عدم طباعة أي تطابق مشترك.

يوفر الأمر comm في بيئات لينكس كفاءة عالية وسرعة فائقة في مطابقة النصوص والتحقق من الفروق السطرية دون استهلاك موارد المعالجة. يتيح دمج هذا الأمر مع أدوات الفرز وتحويلات التدفق البرمجي بناء سكربتات فحص وتدقيق يعتمد عليها في إدارة الخوادم وتحليل السجلات الضخمة.