فرز (يونكس)
في مجال الحوسبة ، يُعدّ الأمر sort برنامجًا قياسيًا يعمل عبر سطر الأوامر في أنظمة التشغيل Unix والأنظمة الشبيهة بها ، حيث يقوم بطباعة أسطر مُدخلاته أو مُجمّعات جميع الملفات المُدرجة في قائمة الوسائط، مُرتبةً حسب الترتيب. ويتم الترتيب بناءً على مفتاح فرز واحد أو أكثر مُستخرج من كل سطر من المُدخلات. افتراضيًا، تُعتبر المُدخلات بأكملها مفتاح فرز. وتُستخدم المسافة الفارغة كفاصل افتراضي بين الحقول. يدعم الأمر عددًا من خيارات سطر الأوامر التي قد تختلف باختلاف التطبيق. على سبيل المثال، يُؤدي استخدام الخيار " " إلى عكس ترتيب الفرز. ويتأثر ترتيب الفرز بإعدادات اللغة المحلية للبيئة . [ 1 ]-r
تاريخ
تم تطبيق أمر sortاستدعاء وظيفة فرز عامة لأول مرة في نظام Multics . [ 2 ] لاحقًا، ظهر في الإصدار الأول من يونكس . كتب هذا الإصدار في الأصل كين تومسون في مختبرات AT&T Bell . بحلول الإصدار الرابع، عدّله تومسون لاستخدام الأنابيب ، لكن الأمر sort احتفظ بخيار تسمية ملف الإخراج لأنه كان يُستخدم لفرز الملف في مكانه. في الإصدار الخامس ، ابتكر تومسون الرمز "-" لتمثيل المدخلات القياسية . [ 3 ]
sortيُعد جزءًا من دليل قابلية النقل X/Open الإصدار 2 (1987). ومن هناك تم توريثه إلى POSIX . [ 4 ]
قام مايك هارتل وبول إيغرت بكتابة نسخة دالة الفرز المضمنة في GNU coreutils . [ 1 ] تستخدم هذه النسخة خوارزمية فرز الدمج . وهي توفر خيار الفرز بالتوازي، إلا أن تحسن الأداء يتضاءل بعد 8 خيوط معالجة. [ 5 ] كما توفر GNU parallel غلافًا لتنفيذ استدعاءات متوازية لدالة الفرز مع خصائص مماثلة لتحسين الأداء: على نظام ذي 48 نواة، يبلغ التسارع حوالي 3 أضعاف. [ 6 ]
تم أيضًا نقل أمر الفرز إلى نظام التشغيل IBM i ، ويمكن الوصول إليه من خلال Qshell المتوافق مع POSIX . [ 7 ]
المنافذ غير POSIX
تتوفر أوامر مماثلة على العديد من أنظمة التشغيل الأخرى، على سبيل المثال، يعد أمر الفرز جزءًا من أدوات ASCII MSX -DOS2 لإصدار MSX-DOS 2. [ 8 ]
يوفر مشروع "uutils" تطبيقًا متعدد المنصات sortمكتوبًا بلغة Rust ، مع دعم جميع خيارات GNU coreutil. يستخدم هذا المشروع دالة par_sort_byor par_sort_unstable_byمن مكتبة Rayon، وهي مكتبة Rust متعددة الخيوط، حيث يُنفذ إما فرز دمج تكيفي مستوحى من timsort أو نوعًا مختلفًا من الفرز السريع الذي يُفشل الأنماط . [ 9 ]
بناء الجملة
فرز [خيار]... [ملف]...
بدون FILE، أو عندما FILEيكون -، يقرأ الأمر من المدخلات القياسية .
حدود
في الجدول أدناه، يشير "Short" إلى دعم الشكل المختصر (المكون من حرف واحد) للخيار فقط. أما الخيارات الطويلة فهي في الأصل امتداد من GNU وليست جزءًا من أي إصدار من SUS أو POSIX. وقد تم اعتمادها لاحقًا أيضًا من قِبل FreeBSD.
| اسم | وصف | SUS / POSIX | الخطة 9 | جحيم | فري بي إس دي | لينكس | MSX-DOS | نظام التشغيل IBM i |
|---|---|---|---|---|---|---|---|---|
| -b ، --ignore-leading-blanks | يتجاهل ro المسافات البادئة. | قصير | قصير | لا | نعم | نعم | لا | قصير |
| -c ، --check | تأكد من أن ملف الإدخال مُرتب. | لا | قصير | لا | نعم | نعم | لا | قصير |
| -C ، --check= < صامت | هادئ > | يشبه الخيار -c، لكنه لا يُبلغ عن السطر الأول الخاطئ. | لا | لا | لا | نعم | نعم | لا | لا |
| -d ، --dictionary-order | لا يأخذ في الاعتبار سوى الفراغات والأحرف الأبجدية الرقمية. | قصير | قصير | لا | نعم | نعم | لا | قصير |
| -f ، --ignore-case | قم بطي الأحرف الصغيرة لتصبح أحرفاً كبيرة. | قصير | قصير | لا | نعم | نعم | لا | قصير |
| -g ، --general-numeric-sort ، --sort=general-numeric | يقارن وفقًا للقيمة العددية العامة. | قصير | قصير | لا | نعم | نعم | لا | لا |
| -h ، --human-numeric-sort ، --sort=human-numeric | قارن الأرقام التي يمكن قراءتها من قبل الإنسان (على سبيل المثال، 2K 1G). | قصير | لا | لا | نعم | نعم | لا | لا |
| -i ، --ignore-nonprinting | لا يأخذ في الاعتبار إلا الأحرف القابلة للطباعة. | قصير | قصير | لا | نعم | نعم | لا | قصير |
| -k , --key= POS1 [, POS2 ] | ابدأ المفتاح عند الموضع 1 (الأصل 1)، وأنهِه عند الموضع 2 (نهاية السطر الافتراضية). | لا | لا | لا | نعم | نعم | لا | لا |
| -م | دمج فقط؛ يُفترض أن ملفات الإدخال مُرتبة مسبقًا. | لا | قصير | لا | نعم | نعم | لا | قصير |
| -M ، --month-sort ، --sort=month | يقارن (غير معروف) < 'يناير' < ... < 'ديسمبر'. | قصير | قصير | لا | نعم | نعم | لا | لا |
| -n ، --numeric-sort ، --sort=numeric | يقارن وفقًا للقيمة العددية للسلسلة النصية. | قصير | قصير | قصير | نعم | نعم | لا | قصير |
| -o OUTPUT | يستخدم ملف الإخراج بدلاً من الإخراج القياسي. | لا | قصير | لا | نعم | نعم | لا | قصير |
| -r ، --reverse | يعكس نتيجة المقارنات. | قصير | قصير | قصير | نعم | نعم | لا | قصير |
| -R ، --random-sort ، --sort=random | يُعيد ترتيب النغمات، لكنه يُجمّع المفاتيح المتطابقة. انظر أيضًا: shuf | لا | لا | لا | نعم | نعم | لا | لا |
| -s | يعمل على تثبيت عملية الفرز عن طريق تعطيل المقارنة كخيار أخير. | لا | لا | لا | نعم | نعم | لا | لا |
| -S الحجم ، --buffer-size= الحجم | استخدم الحجم لتحديد الحد الأقصى لحجم مخزن الذاكرة المؤقت. | لا | لا | لا | نعم | لا | لا | لا |
| -t char , --field-separator= char | يستخدم حرفًا بدلاً من الانتقال من حقل غير فارغ إلى حقل فارغ. بعبارة أخرى، يُستخدم حرف الجدولة للفصل بين الحقول . | لا | قصير | لا | نعم | نعم | لا | قصير |
| -T dir , --temporary-directory= dir | يستخدم الأمر dir للملفات المؤقتة. | لا | قصير | لا | نعم | نعم | لا | لا |
| -u ، --unique | معالجة فريدة لحذف جميع الأسطر باستثناء سطر واحد في كل مجموعة من الأسطر التي تحتوي على مفاتيح متساوية. | لا | قصير | لا | نعم | نعم | لا | قصير |
| -V ، --version-sort | ترتيب طبيعي (للأرقام) داخل النص | لا | لا | لا | نعم | نعم | لا | لا |
| -w | يشبه الخيار -i، لكنه يتجاهل علامات الجدولة والمسافات فقط. | لا | نعم | لا | لا | لا | لا | لا |
| -z ، --zero-terminated | أنهِ الأسطر بـ 0 بايت، وليس بسطر جديد. | لا | لا | لا | نعم | نعم | لا | لا |
| --يساعد | اعرض المساعدة واخرج | لا | لا | لا | نعم | نعم | لا | لا |
| --إصدار | عرض معلومات الإصدار والخروج | لا | لا | لا | نعم | نعم | لا | لا |
| /R | يعكس نتيجة المقارنات. | لا | لا | لا | لا | لا | نعم | لا |
| /S | حدد عدد الأرقام لتحديد عدد الأرقام التي يجب تقييمها في كل سطر. | لا | لا | لا | لا | لا | نعم | لا |
| /أ | فرز حسب رمز ASCII. | لا | لا | لا | لا | لا | نعم | لا |
| /ح | قم بتضمين الملفات المخفية عند استخدام الأحرف البديلة. | لا | لا | لا | لا | لا | نعم | لا |
أمثلة
فرز ملف بالترتيب الأبجدي
دليل هواتف القطط $ سميث، بريت 555-4321 دو، جون 555-1234 دو، جين 555-3214 أفيري، كوري 555-4132 فوغارتي، سوزي 555-2314فرز دليل الهاتف : أفيري، كوري 555-4132 ، دو، جين 555-3214 ، دو، جون 555-1234، فوغارتي، سوزي 555-2314، سميث، بريت 555-4321فرز حسب الرقم
يُتيح هذا -nالخيار للبرنامج فرز الملفات وفقًا لقيمتها العددية. يُنتج الأمر du مخرجات تبدأ برقم، وهو حجم الملف، لذا يمكن تمرير هذه المخرجات إلى الأمر sort لإنتاج قائمة بالملفات مرتبة حسب حجمها (تصاعديًا).
$ دو / بن / * | فرز -ن 4 /bin/اسم المجال 24 /bin/ls 102 /bin/sh 304 /bin/cshيقوم الأمر find مع خيار ls بطباعة أحجام الملفات في الحقل السابع، وبالتالي يتم إنتاج قائمة بملفات LaTeX مرتبة حسب حجم الملف بواسطة:
$ find . -name "*.tex" -ls | sort -k 7n الأعمدة أو الحقول
استخدم -kخيار الفرز حسب عمود معين. على سبيل المثال، استخدم " -k 2" للفرز حسب العمود الثاني. في الإصدارات القديمة من برنامج الفرز، كان هذا +1الخيار يجعل البرنامج يفرز البيانات حسب العمود الثاني ( +2وحسب العمود الثالث، وهكذا). هذا الاستخدام مُهمل.
$ cat zipcode Adam 12345 Bob 34567 Joe 56789 Sam 45678 Wendy 23456$ sort -k 2n zipcode Adam 12345 Wendy 23456 Bob 34567 Sam 45678 Joe 56789فرز حسب حقول متعددة
يتيح لك هذا -k m,nالخيار الفرز بناءً على مفتاح قد يتكون من عدة حقول (البدء من العمود m، والانتهاء عند العمود n):
$ cat quota fred 2000 bob 1000 an 1000 chad 1000 don 1500 eric 500$ sort -k2,2n -k1,1 quota eric 500 an 1000 bob 1000 chad 1000 don 1500 fred 2000هنا، يتم الفرز الأول باستخدام العمود الثاني. -k2,2nيحدد هذا الخيار الفرز بناءً على المفتاح الذي يبدأ وينتهي بالعمود الثاني، والفرز رقميًا. في حال -k2استخدام خيار آخر، سيبدأ مفتاح الفرز من العمود الثاني ويمتد إلى نهاية السطر، شاملًا جميع الحقول بينهما. -k1,1يحدد هذا الخيار كسر التعادل باستخدام القيمة في العمود الأول، مع الفرز أبجديًا افتراضيًا. لاحظ أن كلاً من "بوب" و"تشاد" لهما نفس الحصة، ويتم فرزهما أبجديًا في الناتج النهائي.
فرز ملف مفصول بعلامة الأنبوب
$ sort -k2,2,-k1,1 -t '|' zipcode Adam|12345 Wendy|23456 Sam|45678 Joe|56789 Bob|34567فرز ملف مفصول بعلامات الجدولة
يتطلب فرز ملف يحتوي على قيم مفصولة بعلامات جدولة تحديد علامة الجدولة كفاصل بين الأعمدة. يستخدم هذا المثال التوضيحي صيغة علامة الدولار في الصدفة [ 10 ] [ 11 ] لتحديد علامة الجدولة كسلسلة هروب C.
$ sort -k2,2 -t $'\t' phonebook Doe, John 555-1234 Fogarty, Suzie 555-2314 Doe, Jane 555-3214 Avery, Cory 555-4132 Smith, Brett 555-4321رتب بالترتيب العكسي
الخيار -rببساطة يعكس ترتيب الفرز:
$ sort -rk 2n zipcode Joe 56789 Sam 45678 Bob 34567 Wendy 23456 Adam 12345فرز عشوائياً
يحتوي تطبيق GNU على -R --random-sortخيار يعتمد على التجزئة؛ وهذا ليس خلطًا عشوائيًا كاملًا لأنه يرتب الأسطر المتطابقة معًا. أما الفرز العشوائي الحقيقي فيوفره برنامج shuf في أنظمة Unix .
فرز حسب الإصدار
تتضمن نسخة GNU -V --version-sortخيارًا لفرز أرقام الإصدارات ضمن النصوص بشكل طبيعي. يتم تقسيم سلسلتي نصيتين للمقارنة إلى مجموعات من الأحرف ومجموعات من الأرقام. تُقارن مجموعات الأحرف أبجديًا رقميًا، بينما تُقارن مجموعات الأرقام رقميًا (أي مع حذف الأصفار البادئة، وكلما زاد عدد الأرقام كان الرقم أكبر، وإلا فإن الأرقام المختلفة في أقصى اليسار هي التي تحدد النتيجة). تُقارن المجموعات من اليسار إلى اليمين، وتُحدد أول مجموعة غير متساوية في هذه العملية النص الأكبر. يعمل هذا مع عناوين IP، وسلاسل إصدارات حزم Debian، والمهام المشابهة التي تتضمن أرقامًا ذات أطوال متغيرة ضمن السلاسل النصية.
انظر أيضاً
مراجع
- 1 2 – دليل مستخدم لينكس – أوامر المستخدم من Manned.org
- ↑ "أوامر متعددة" . www.multicians.org .
- ↑ ماكيلروي، دكتور في الطب (1987). قارئ أبحاث يونكس: مقتطفات مشروحة من دليل المبرمج، 1971-1986 (ملف PDF) (تقرير فني). مختبرات بيل. 139.
- ↑ – مرجع الصدفة والأدوات المساعدة، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group
- ↑ "استدعاء الفرز (GNU Coreutils 9.8)" .
- ↑ "الاسم — وثائق GNU Parallel 20250922" . www.gnu.org .
- ↑ آي بي إم . "برمجة Qshell لنظام IBM System i الإصدار 7.2" (ملف PDF) . آي بي إم . تم الاطلاع عليه بتاريخ 5 سبتمبر 2020 .
- ^ "دليل مستخدم أدوات MSX-DOS2 - أدوات MSX-DOS2 ユ ザ ズ マ ニ ュ ア ル" . 1 أبريل 1993 – عبر أرشيف الإنترنت.
- ↑ "ParallelSliceMut in rayon::slice - Rust" . docs.rs .
- ↑ "دليل مرجع GNU Bash، لـ Bash، الإصدار 4.2: القسم 3.1.2.4 اقتباس ANSI-C" . مؤسسة البرمجيات الحرة، 28 ديسمبر 2010. تاريخ الاطلاع: 1 فبراير 2013. تُعامل الكلمات التي على شكل $'string' معاملة خاصة. تُستبدل الكلمة بـ string، مع استبدال الأحرف التي تم تهريبها بواسطة الشرطة
المائلة العكسية وفقًا لمعيار ANSI C.
- ↑ فاولر، جلين س.؛ كورن، ديفيد ج .؛ فو، كيم-فونغ. "أسئلة وأجوبة حول كورن شيل" . مؤرشف من الأصل بتاريخ 27 مايو 2013. تم الاطلاع عليه بتاريخ 3 مارس 2015.
أُضيفت صيغة السلسلة النصية $'...' إلى ksh93 لحل مشكلة إدخال الأحرف الخاصة في النصوص البرمجية. وهي تستخدم قواعد ANSI-C لترجمة السلسلة بين '...'.
للمزيد من القراءة
- شوتس (الابن)، ويليام إي. (2012). سطر أوامر لينكس: مقدمة شاملة . دار نشر نو ستارش . رقم ISBN 978-1593273897.
- ماكيلهيرن، كيرك (2006). سطر أوامر نظام التشغيل ماك أو إس إكس: يونكس من الداخل . جون وايلي وأولاده . ISBN 978-0470113851.
روابط خارجية
- صفحة دليل برنامج الفرز الأصلي لنظام BSD Unix
- – دليل مستخدم لينكس – أوامر المستخدم من Manned.org
- – دليل مبرمج الخطة 9 ، المجلد 1
- – دليل أوامر Inferno العامة
- للحصول على مزيد من التفاصيل حول عملية الفرز، تفضل بزيارة موقع Softpanorama.
- خوارزميات الفرز
- أدوات معالجة النصوص في نظام يونكس
- أدوات يونكس SUS2008
- أوامر الخطة 9
- أوامر نظام التشغيل إنفيرنو
- أوامر IBM i Qshell
- برامج يونكس القياسية
