إتصالات
commهو أمرٌ في سطر الأوامر لمقارنة ملفين بحثًا عن الأسطر المشتركة والمختلفة. يقرأ الملفين كسلسلة نصية ويُخرج النص في ثلاثة أعمدة. يحتوي العمودان الأولان على أسطر خاصة بالملف الأول والثاني على التوالي، بينما يحتوي العمود الأخير على الأسطر المشتركة بينهما. عادةً ما تُفصل الأعمدة بعلامة الجدولة (Tab) . إذا احتوى النص المُدخل على أسطر تبدأ بعلامة الجدولة، فقد تصبح أعمدة الإخراج غير واضحة.
لتحقيق الكفاءة، تتطلب التطبيقات القياسية أن يكون كلا ملفي الإدخال مُرتبين وفقًا لترتيبcomm الأسطر نفسه ، مع فرز معجمي. يمكن استخدام الأمر لهذا الغرض. تعتمد الخوارزمية على ترتيب الأسطر الخاص باللغة الحالية . إذا لم تكن أسطر الملفين مُرتبة وفقًا للغة الحالية، فإن النتيجة غير مُحددة.sortcomm
تم تحديد هذا الأمر في معيار POSIX . وهو متاح على نطاق واسع في أنظمة التشغيل الشبيهة بنظام يونكس منذ منتصف إلى أواخر ثمانينيات القرن الماضي. وقد طُبِّق في الأصل بواسطة لي إي. ماكماهون ، وظهر الأمر لأول مرة في الإصدار الرابع من يونكس . [ 1 ] أما النسخة الموجودة في GNU coreutils فقد كتبها ريتشارد ستالمان وديفيد ماكنزي. [ 2 ]
مثال
طعام القطط : تفاح، موز، باذنجان. بار القطط : تفاح، موز، موز، كوسة. بار الطعام: تفاح ، موز، موز ، باذنجان ، كوسة.هذا يدل على أن كلا الملفين يحتويان على موزة واحدة، لكن الشريط فقط يحتوي على موزة ثانية.
بتفصيلٍ أكثر، يظهر ملف الإخراج بالشكل التالي. لاحظ أن العمود يُفسَّر بعدد علامات الجدولة في بدايته. يُمثِّل \t علامة جدولة، بينما يُمثِّل \n سطرًا جديدًا ( رمز الهروب#البرمجة وتنسيقات البيانات ).
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \t | \t | أ | ص | ص | ل | هـ | \n | ||
| 1 | \t | \t | ب | أ | ن | أ | ن | أ | \n | |
| 2 | \t | ب | أ | ن | أ | ن | أ | \n | ||
| 3 | هـ | ز | ز | ص | ل | أ | ن | ت | \n | |
| 4 | \t | z | u | ج | ج | ح | أنا | ن | أنا | \n |
الحدود
يجب تخزين سطر كامل مؤقتًا من كل ملف إدخال أثناء مقارنة الأسطر، قبل كتابة سطر الإخراج التالي.
تقوم بعض التطبيقات بقراءة الأسطر باستخدام الدالة readlinebuffer()التي لا تفرض أي قيود على طول السطر إذا كانت ذاكرة النظام كافية.
تستخدم بعض التطبيقات الأخرى دالة لقراءة الأسطر fgets(). تتطلب هذه الدالة مخزنًا مؤقتًا ثابتًا. في هذه التطبيقات، غالبًا ما يتم تحديد حجم المخزن المؤقت وفقًا لماكرو POSIXLINE_MAX .
مقارنة بالفرق
على الرغم من أن الأمر يُستخدم أيضًا لمقارنة الملفات، diffإلا أنه يُقدم معلومات مختلفة تمامًا عن الأمر الآخر comm. وبشكل عام، diffيُعد الأمر الآخر أكثر فعالية من الأمر الأول comm. أما الأمر الأبسط commفهو الأنسب للاستخدام في البرامج النصية.
الفرق الأساسي بينهما commهو diffأن الأول commيتجاهل المعلومات المتعلقة بترتيب الأسطر قبل الفرز.
يتمثل أحد الفروقات الطفيفة بينهما commفي diffأن الأول commلا يُظهر تغييرًا في سطر ما بين الملفين؛ إذ تُعرض الأسطر إما في عمود "من الملف رقم 1" أو "من الملف رقم 2" أو "في كليهما". قد يكون هذا مفيدًا إذا رغب المستخدم في اعتبار سطرين مختلفين حتى لو كانت الاختلافات بينهما طفيفة.
على عكس الأمر السابق diff، لا يشير رمز الخروج في هذا الأمر إلى ما إذا كانت الملفات متطابقة أم لا. وكما هو معتاد، يشير الرقم 0 إلى النجاح، بينما تشير القيم الموجبة الأخرى إلى وجود خطأ.comm
انظر أيضاً
- مقارنة أدوات مقارنة الملفات
- قائمة أوامر POSIX
- cmp (Unix) – أمر مقارنة الملفات
- cut (Unix) – أمر shell لاستخراج أجزاء من ملفات نصية
مراجع
- ↑ ماكيلروي، دكتور في الطب (1987). قارئ أبحاث يونكس: مقتطفات مشروحة من دليل المبرمج، 1971-1986 (ملف PDF) (تقرير فني). مختبرات بيل. 139.
- ↑ "Comm(1): مقارنة ملفين مرتبين سطرًا بسطر - صفحة دليل لينكس" . مؤرشف من الأصل بتاريخ 26-01-2019 . تم الاطلاع عليه بتاريخ 26-01-2019 .
روابط خارجية
- : تحديد أو رفض الأسطر المشتركة بين ملفين – مرجع Shell والأدوات المساعدة، مواصفات UNIX الموحدة ، الإصدار 5 من مجموعة Open Group
- – دليل مبرمج الخطة 9 ، المجلد 1
- – دليل أوامر Inferno العامة
- أدوات مجانية لمقارنة الملفات
- برامج يونكس القياسية
- أدوات يونكس SUS2008
- أوامر الخطة 9
- أوامر نظام التشغيل إنفيرنو
