OnWorks Linux و Windows Online WorkStations

الشعار

استضافة مجانية على الإنترنت لمحطات العمل

<السابق | المحتويات | التالي>

sort

sort يقوم البرنامج بفرز محتويات الإدخال القياسي ، أو ملفًا واحدًا أو أكثر محددًا في سطر الأوامر ، ويرسل النتائج إلى الإخراج القياسي. باستخدام نفس التقنية التي استخدمناها قط، يمكننا إثبات معالجة الإدخال القياسي مباشرةً من لوحة المفاتيح:



[me @ linuxbox ~] $ فرز> foo.txt

cba

[me @ linuxbox ~] $ القط foo.txt

اي بي سي

[me @ linuxbox ~] $ فرز> foo.txt

cba

[me @ linuxbox ~] $ القط foo.txt

اي بي سي


بعد إدخال الأمر ، نكتب الأحرف "ج" و "ب" و "أ" ، متبوعة مرة أخرى السيطرة- د للإشارة إلى نهاية الملف. ثم نعرض الملف الناتج ونرى أن الأسطر تظهر الآن بترتيب مرتب.

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



قم بفرز file1.txt file2.txt file3.txt> final_sorted_list.txt

قم بفرز file1.txt file2.txt file3.txt> final_sorted_list.txt


نوع لديه العديد من الخيارات المثيرة للاهتمام. وهنا لائحة جزئية:


جدول 20-1: خيارات الفرز الشائعة


خيار

خيار طويل

الوصف

-b

- إهمال الفراغات الرائدة

بشكل افتراضي ، يتم إجراء الفرز على

السطر بأكمله ، بدءًا من

أول حرف في السطر. هذه

يؤدي الخيار إلى تجاهل الفرز

المسافات الرائدة في الخطوط و

يحسب الفرز على أساس الأول

حرف بدون مسافة بيضاء على

الخط.

-f

- أقل من حالة

يجعل الفرز غير حساس لحالة الأحرف.


-n

- فرز رقمي

يقوم بالفرز بناءً على التقييم الرقمي لسلسلة. يتيح استخدام هذا الخيار إجراء الفرز على القيم الرقمية بدلاً من القيم الأبجدية.

-r

--يعكس

فرز بترتيب عكسي. النتائج في

تنازليًا وليس تصاعديًا

النظام.

-k

- مفتاح =field1[,field2]

فرز على أساس حقل المفتاح الموجود

تبدأ من field1 إلى field2 بدلا من

الخط بأكمله. انظر المناقشة أدناه.

-m

--دمج

تعامل مع كل حجة على أنها الاسم

من ملف تم فرزها مسبقًا. دمج عدة

الملفات في نتيجة مرتبة واحدة

دون القيام بأي عمل إضافي

فرز.

-o

- الخرج =ملف

إرسال الإخراج الفرز إلى ملف بدلا

من الناتج القياسي.

-t

- فاصل الحقول =دبابة

حدد فاصل المجال

اختلاف الشخصيات. بشكل افتراضي الحقول

مفصولة بمسافات أو علامات تبويب.


على الرغم من أن معظم الخيارات المذكورة أعلاه تشرح نفسها بنفسها ، إلا أن بعضها ليس كذلك. أولاً ، دعنا نلقي نظرة على ملف -n الخيار المستخدم في الفرز الرقمي. باستخدام هذا الخيار ، من الممكن فرز القيم بناءً على القيم الرقمية. يمكننا إثبات ذلك من خلال فرز نتائج du الأمر لتحديد أكبر مستخدمي مساحة القرص. عادة ، du يسرد الأمر نتائج الملخص بترتيب اسم المسار:



[me @ linuxbox ~] $ du -s / usr / share / * | رئيس

252 / البيرة / حصة / محلي

96 / usr / share / acpi-support

8 / البيرة / المشاركة / الإضافة

196 / البيرة / حصة / الكارت

344 / البيرة / حصة / السا

8 / usr / share / alsa-base 12488 / usr / share / anthy

8 / البيرة / حصة / apmd

21440 / usr / share / app-install

48 / البيرة / حصة / تطبيق التسجيل

[me @ linuxbox ~] $ du -s / usr / share / * | رئيس

252 / البيرة / حصة / محلي

96 / usr / share / acpi-support

8 / البيرة / المشاركة / الإضافة

196 / البيرة / حصة / الكارت

344 / البيرة / حصة / السا

8 / usr / share / alsa-base 12488 / usr / share / anthy

8 / البيرة / حصة / apmd

21440 / usr / share / app-install

48 / البيرة / حصة / تطبيق التسجيل


في هذا المثال ، نرسل النتائج إلى رئيس لقصر النتائج على الأسطر العشرة الأولى. يمكننا إنتاج قائمة مرتبة عدديًا لإظهار أكبر عشرة مستهلكين للمساحة بهذه الطريقة:



[me @ linuxbox ~] $ du -s / usr / share / * | فرز -nr | رئيس

509940 / usr / share / locale-langpack

242660 / usr / share / doc

197560 / البيرة / المشاركة / الخطوط

179144 / البيرة / حصة / جنوم

146764 / usr / share / myspell

144304 / usr / share / gimp

135880 / usr / share / dict

76508 / usr / share / icons

68072 / usr / share / apps

62844 / usr / share / foomatic

[me @ linuxbox ~] $ du -s / usr / share / * | فرز -nr | رئيس

509940 / usr / share / locale-langpack

242660 / usr / share / doc

197560 / البيرة / المشاركة / الخطوط

179144 / البيرة / حصة / جنوم

146764 / usr / share / myspell

144304 / usr / share / gimp

135880 / usr / share / dict

76508 / usr / share / icons

68072 / usr / share / apps

62844 / usr / share / foomatic


باستخدام -رقم الخيارات ، ننتج فرزًا عدديًا عكسيًا ، مع ظهور القيم الأكبر أولاً في النتائج. يعمل هذا الفرز لأن القيم العددية تحدث في بداية كل سطر. ولكن ماذا لو أردنا فرز قائمة بناءً على بعض القيم الموجودة داخل السطر؟ على سبيل المثال ، نتائج ملف لس -l:


صورة

[me @ linuxbox ~] $ ls -l / usr / bin | رئيس

إجمالي 152948


-rwxr-xr-x

1

جذر

جذر

34824

2016-04-04

02:42

[

-rwxr-xr-x

1

جذر

جذر

101556

2007-11-27

06:08

a2 ص

-rwxr-xr-x

1

جذر

جذر

13036

2016-02-27

08:22

ربط

-rwxr-xr-x

1

جذر

جذر

10552

2007-08-15

10:34

ACPI

-rwxr-xr-x

1

جذر

جذر

3800

2016-04-14

03:51

acpi_fakekey

-rwxr-xr-x

1

جذر

جذر

7536

2016-04-19

00:19

acpi_listen

-rwxr-xr-x

1

جذر

جذر

3576

2016-04-29

07:57

com.addpart

-rwxr-xr-x

1

جذر

جذر

20808

2016-01-03

18:02

addr2line

-rwxr-xr-x

1

جذر

جذر

489704

2016-10-09

17:02

adept_batch


تجاهل ذلك في الوقت الحالي ls يمكننا فرز نتائجها حسب الحجم ، يمكننا استخدامها sort لفرز هذه القائمة حسب حجم الملف ، أيضًا:


صورة

[me @ linuxbox ~] $ ls -l / usr / bin | فرز -nr -k 5 | رئيس


-rwxr-xr-x

1

جذر

جذر

8234216

2016-04-07

17:42

إنكسكيب

-rwxr-xr-x

1

جذر

جذر

8222692

2016-04-07

17:42

إنكفيو

-rwxr-xr-x

1

جذر

جذر

3746508

2016-03-07

23:45

الأعرج 2.4

-rwxr-xr-x

1

جذر

جذر

3654020

2016-08-26

16:16

الكميات

-rwxr-xr-x

1

جذر

جذر

2928760

2016-09-10

14:31

com.gdbtui

-rwxr-xr-x

1

جذر

جذر

2928756

2016-09-10

14:31

جدب

-rwxr-xr-x

1

جذر

جذر

2602236

2016-10-10

12:56

صاف


-rwxr-xr-x

1

جذر

جذر

2304684

2016-10-10

12:56

com.rpcclient

-rwxr-xr-x

1

جذر

جذر

2241832

2016-04-04

05:56

أهلية

-rwxr-xr-x

1

جذر

جذر

2202476

2016-10-10

12:56

com.smbcacls


العديد من الاستخدامات sort تنطوي على معالجة بنك، مثل نتائج ls الأمر أعلاه. إذا طبقنا مصطلحات قاعدة البيانات على الجدول أعلاه ، فسنقول أن كل صف هو ملف سجل وأن كل سجل يتكون من عدة الحقول، مثل ملف الجزية ، وعدد الروابط ، واسم الملف ، وحجم الملف وما إلى ذلك. sort قادر على معالجة الحقول الفردية. من حيث قواعد البيانات ، نحن قادرون على تحديد واحد أو أكثر المجالات الرئيسية لاستخدامها فرز المفاتيح. في المثال أعلاه ، نحدد n و r خيارات لإجراء فرز رقمي عكسي وتحديد -ك 5 ليصنع sort استخدم الحقل الخامس كمفتاح للفرز.

k الخيار مثير جدًا للاهتمام وله العديد من الميزات ، لكن أولاً نحتاج إلى التحدث عن كيفية القيام بذلك sort يحدد المجالات. لنفكر في ملف نصي بسيط للغاية يتكون من سطر واحد يحتوي على اسم المؤلف:



وليام شوتس

وليام شوتس


افتراضيا، sort يرى أن هذا السطر يحتوي على حقلين. يحتوي الحقل الأول على الأحرف:

"ويليام"

والحقل الثاني يحتوي على الأحرف:

"لقطات"

مما يعني أنه يتم استخدام أحرف المسافات البيضاء (المسافات وعلامات الجدولة) كمحددات بين الحقول وأن المحددات يتم تضمينها في الحقل عند إجراء الفرز.

النظر مرة أخرى إلى خط من ls الإخراج ، يمكننا أن نرى أن السطر يحتوي على ثمانية حقول وأن الحقل الخامس هو حجم الملف:



-rwxr-xr-x 1 جذر جذر 8234216 2016-04-07 17:42 إنكسكيب

-rwxr-xr-x 1 جذر جذر 8234216 2016-04-07 17:42 إنكسكيب


بالنسبة لسلسلة تجاربنا التالية ، دعنا ننظر في الملف التالي الذي يحتوي على محفوظات توزيعات Linux الثلاثة الشائعة التي تم إصدارها من 2006 إلى 2008. يحتوي كل سطر في الملف على ثلاثة حقول: اسم التوزيع ورقم الإصدار وتاريخ الإصدار في MM / DD / تنسيق YYYY:


SUSE

10.2

12/07/2006

فيدورا

10

11/25/2008

SUSE

11.0

06/19/2008

أوبونتو

8.04

04/24/2008

فيدورا

8

11/08/2007

SUSE

10.3

10/04/2007

أوبونتو

6.10

10/26/2006

فيدورا

7

05/31/2007

أوبونتو

7.10

10/18/2007

أوبونتو

7.04

04/19/2007

SUSE

10.1

05/11/2006

فيدورا

6

10/24/2006

فيدورا

9

05/13/2008

أوبونتو

6.06

06/01/2006

أوبونتو

8.10

10/30/2008

فيدورا

5

03/20/2006


استخدام محرر نصوص (ربما همة) ، سنقوم بإدخال هذه البيانات وتسمية الملف الناتج dis-tros.txt.

بعد ذلك ، سنحاول فرز الملف ومراقبة النتائج:



[لي @ لينوكس بوكس

~] $

فرز distros.txt

فيدورا 10

11/25/2008

فيدورا 5

03/20/2006

فيدورا 6

10/24/2006

فيدورا 7

05/31/2007

فيدورا 8

11/08/2007

فيدورا 9

05/13/2008

سوس 10.1

05/11/2006

سوس 10.2

12/07/2006

سوس 10.3

10/04/2007

سوس 11.0

06/19/2008

أوبونتو 6.06

06/01/2006

أوبونتو 6.10

10/26/2006

أوبونتو 7.04

04/19/2007

أوبونتو 7.10

10/18/2007

أوبونتو 8.04

04/24/2008

أوبونتو 8.10

10/30/2008


حسنًا ، لقد نجحت في الغالب. تحدث المشكلة في فرز أرقام إصدارات Fedora. نظرًا لأن الرقم "1" يأتي قبل الرقم "5" في مجموعة الأحرف ، ينتهي الأمر بالإصدار "10" في الأعلى بينما يقع الإصدار "9" في الأسفل.

لإصلاح هذه المشكلة ، سيتعين علينا الفرز على مفاتيح متعددة. نريد إجراء فرز أبجدي في الحقل الأول ثم فرز رقمي في الحقل الثاني. sort يسمح


حالات متعددة من -k الخيار بحيث يمكن تحديد مفاتيح الفرز المتعددة. في الواقع ، قد يشتمل المفتاح على مجموعة من الحقول. إذا لم يتم تحديد نطاق (كما كان الحال مع الأمثلة السابقة) ، sort يستخدم مفتاحًا يبدأ بالحقل المحدد ويمتد حتى نهاية السطر. فيما يلي بناء الجملة لفرزنا متعدد المفاتيح:



[لي @ لينوكس بوكس

~] $

فرز - key = 1,1،2 --key = XNUMXn distros.txt

فيدورا 5

03/20/2006

فيدورا 6

10/24/2006

فيدورا 7

05/31/2007

فيدورا 8

11/08/2007

فيدورا 9

05/13/2008

فيدورا 10

11/25/2008

سوس 10.1

05/11/2006

سوس 10.2

12/07/2006

سوس 10.3

10/04/2007

سوس 11.0

06/19/2008

أوبونتو 6.06

06/01/2006

أوبونتو 6.10

10/26/2006

أوبونتو 7.04

04/19/2007

أوبونتو 7.10

10/18/2007

أوبونتو 8.04

04/24/2008

أوبونتو 8.10

10/30/2008


على الرغم من أننا استخدمنا الشكل الطويل لخيار الوضوح ، -k 1,1،2 -k XNUMXn سيكون مكافئًا تمامًا. في المثال الأول لخيار المفتاح ، حددنا نطاقًا من الحقول لتضمينها في المفتاح الأول. نظرًا لأننا أردنا قصر الفرز على الحقل الأول فقط ، فقد حددنا ذلك 1,1 وهو ما يعني "ابدأ من الحقل الأول وانتهى عند الحقل الأول." في الحالة الثانية ، حددنا 2n، مما يعني أن الحقل 2 هو مفتاح الفرز وأن الفرز يجب أن يكون رقميًا. قد يتم تضمين حرف خيار في نهاية محدد المفتاح للإشارة إلى نوع الفرز الذي سيتم إجراؤه. أحرف الخيار هذه هي نفس الخيارات العامة لملف sort برنامج: b (تجاهل الفراغات البادئة) ، n (فرز رقمي) ، r (فرز عكسي) ، وما إلى ذلك.

يحتوي الحقل الثالث في قائمتنا على تاريخ بتنسيق غير ملائم للفرز. في الحواسيب ، عادة ما يتم تنسيق التواريخ بالترتيب YYYY-MM-DD لتسهيل الفرز الزمني ، لكن تاريخنا بالتنسيق الأمريكي MM / DD / YYYY. كيف يمكننا فرز هذه القائمة بالترتيب الزمني؟

لحسن الحظ، sort يوفر وسيلة. يسمح الخيار الرئيسي بمواصفات إزاحة داخل الحقول ، حتى نتمكن من تحديد المفاتيح داخل الحقول:



[me @ linuxbox ~] $ فرز -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

فيدورا 10 11/25/2008

نظام التشغيل Ubuntu 8.10 10/30/2008

[me @ linuxbox ~] $ فرز -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

فيدورا 10 11/25/2008

نظام التشغيل Ubuntu 8.10 10/30/2008


SUSE

11.0

06/19/2008

فيدورا

9

05/13/2008

أوبونتو

8.04

04/24/2008

فيدورا

8

11/08/2007

أوبونتو

7.10

10/18/2007

SUSE

10.3

10/04/2007

فيدورا

7

05/31/2007

أوبونتو

7.04

04/19/2007

SUSE

10.2

12/07/2006

أوبونتو

6.10

10/26/2006

فيدورا

6

10/24/2006

أوبونتو

6.06

06/01/2006

SUSE

10.1

05/11/2006

فيدورا

5

03/20/2006


بتحديد -ك 3.7 نحن نوجه sort لاستخدام مفتاح الفرز الذي يبدأ من الحرف السابع داخل الحقل الثالث ، والذي يتوافق مع بداية العام. وبالمثل ، نحدد -ك 3.1 و -ك 3.4 لعزل أجزاء الشهر واليوم من التاريخ. نضيف أيضا n و r خيارات لتحقيق فرز رقمي عكسي. ال b يتم تضمين الخيار لمنع المسافات البادئة (التي تختلف أرقامها من سطر إلى آخر ، وبالتالي تؤثر على نتيجة الفرز) في حقل التاريخ.

لا تستخدم بعض الملفات علامات الجدولة والمسافات كمحددات للحقول ؛ على سبيل المثال ، / الخ / باسود

ملف:



[me @ linuxbox ~] $ رئيس / الخ / passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh

[me @ linuxbox ~] $ رئيس / الخ / passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh


الحقول في هذا الملف محددة بنقطتين (:) ، فكيف نفرز هذا الملف باستخدام حقل مفتاح؟ sort يوفر -t خيار لتعريف حرف فاصل المجال. لفرز ملف باسود ملف في الحقل السابع (الغلاف الافتراضي للحساب) ، يمكننا القيام بذلك:


[me @ linuxbox ~] $ Sort -t ':' -k 7 / etc / passwd | رئيس

أنا: x: 1001: 1001: نفسي ،،،: / home / me: / bin / bash

[me @ linuxbox ~] $ Sort -t ':' -k 7 / etc / passwd | رئيس

أنا: x: 1001: 1001: نفسي ،،،: / home / me: / bin / bash


الجذر: x: 0: 0: root: / root: / bin / bash dhcp: x: 101: 102 :: / غير موجود: / bin / false

gdm: x: 106: 114: Gnome Display Manager: / var / lib / gdm: / bin / false hplip: x: 104: 7: مستخدم نظام HPLIP ،،،: / var / run / hplip: / bin / false klog : x: 103: 104 :: / home / klog: / bin / false messagebus: x: 108: 119 :: / var / run / dbus: / bin / false polkituser: x: 110: 122: PolicyKit ،،،: / var / run / PolicyKit: / bin / false pulse: x: 107: 116: PulseAudio daemon ،،،: / var / run / pulse: / bin / false

الجذر: x: 0: 0: root: / root: / bin / bash dhcp: x: 101: 102 :: / غير موجود: / bin / false

gdm: x: 106: 114: Gnome Display Manager: / var / lib / gdm: / bin / false hplip: x: 104: 7: مستخدم نظام HPLIP ،،،: / var / run / hplip: / bin / false klog : x: 103: 104 :: / home / klog: / bin / false messagebus: x: 108: 119 :: / var / run / dbus: / bin / false polkituser: x: 110: 122: PolicyKit ،،،: / var / run / PolicyKit: / bin / false pulse: x: 107: 116: PulseAudio daemon ،،،: / var / run / pulse: / bin / false


من خلال تحديد حرف النقطتين كفاصل المجال ، يمكننا الفرز في الحقل السابع.


أفضل الحوسبة السحابية لنظام التشغيل في OnWorks: