ایستگاه های کاری آنلاین OnWorks Linux و Windows

لوگو

میزبانی آنلاین رایگان برای ایستگاه های کاری

<قبلی | فهرست | بعدی>

نوع

La نوع برنامه محتویات ورودی استاندارد یا یک یا چند فایل مشخص شده در خط فرمان را مرتب می کند و نتایج را به خروجی استاندارد می فرستد. با استفاده از همان تکنیکی که با آن استفاده کردیم گربه، می توانیم پردازش ورودی استاندارد را مستقیماً از صفحه کلید نشان دهیم:



[me@linuxbox ~]$ sort > foo.txt

CBA

[me@linuxbox ~]$ cat foo.txt

abc

[me@linuxbox ~]$ sort > foo.txt

CBA

[me@linuxbox ~]$ cat foo.txt

abc


پس از وارد کردن دستور، حروف c، b و a را تایپ می کنیم و یک بار دیگر می نویسیم Ctrl-d برای نشان دادن پایان پرونده سپس فایل حاصل را مشاهده می کنیم و می بینیم که خطوط اکنون به ترتیب مرتب شده ظاهر می شوند.

پس از نوع می تواند چندین فایل را در خط فرمان به عنوان آرگومان بپذیرد، این امکان وجود دارد ادغام کردن چندین فایل در یک کل مرتب شده واحد. به عنوان مثال، اگر ما سه فایل متنی داشتیم و می خواستیم آنها را در یک فایل مرتب شده ترکیب کنیم، می توانیم کاری شبیه به این انجام دهیم:



مرتب سازی 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

--field-separator=ارابه

جداکننده فیلد را تعریف کنید

شخصیت. به طور پیش فرض فیلدها هستند

با فاصله یا برگه ها از هم جدا شده اند.


اگرچه بسیاری از گزینه های بالا کاملاً توضیحی هستند، برخی از آنها اینطور نیستند. اول، بیایید نگاه کنیم -n گزینه ای که برای مرتب سازی عددی استفاده می شود. با این گزینه می توان مقادیر را بر اساس مقادیر عددی مرتب کرد. ما می توانیم این را با مرتب سازی نتایج نشان دهیم du دستور تعیین بزرگترین کاربران فضای دیسک. به طور معمول، du فرمان نتایج یک خلاصه را به ترتیب نام مسیر فهرست می کند:



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

252 /usr/share/aclocal

96 /usr/share/acpi-support

8 /usr/share/adduser

196 /usr/share/alacarte

344 /usr/share/alsa

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

8 /usr/share/apmd

21440 /usr/share/app-install

48 /usr/share/application-registry

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

252 /usr/share/aclocal

96 /usr/share/acpi-support

8 /usr/share/adduser

196 /usr/share/alacarte

344 /usr/share/alsa

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

8 /usr/share/apmd

21440 /usr/share/app-install

48 /usr/share/application-registry


در این مثال، نتایج را به داخل لوله می کنیم سر برای محدود کردن نتایج به ده خط اول. ما می توانیم یک لیست مرتب شده عددی برای نشان دادن ده مصرف کننده بزرگ فضا به این ترتیب ایجاد کنیم:



[me@linuxbox ~]$ du -s /usr/share/* | مرتب سازی -nr | سر

509940 /usr/share/locale-langpack

242660 /usr/share/doc

197560 /usr/share/fonts

179144 /usr/share/gnome

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 /usr/share/fonts

179144 /usr/share/gnome

146764 /usr/share/myspell

144304 /usr/share/gimp

135880 /usr/share/dict

76508 /usr/share/icons

68072 /usr/share/apps

62844 /usr/share/foomatic


با استفاده از -شماره گزینه‌ها، یک مرتب‌سازی عددی معکوس تولید می‌کنیم که بزرگترین مقادیر در ابتدا در نتایج ظاهر می‌شوند. این مرتب سازی کار می کند زیرا مقادیر عددی در ابتدای هر خط رخ می دهد. اما اگر بخواهیم لیستی را بر اساس مقداری که در داخل خط یافت می شود مرتب کنیم، چه؟ به عنوان مثال، نتایج یک ls-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

a2d

-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

اضافه کردن

-rwxr-xr-x

1

ریشه

ریشه

20808

2016-01-03

18:02

adr2line

-rwxr-xr-x

1

ریشه

ریشه

489704

2016-10-09

17:02

adept_batch


فعلاً نادیده گرفتن آن ls می توانیم نتایج آن را بر اساس اندازه مرتب کنیم، می توانیم استفاده کنیم نوع برای مرتب کردن این لیست بر اساس اندازه فایل، همچنین:


تصویر

[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

inkview

-rwxr-xr-x

1

ریشه

ریشه

3746508

2016-03-07

23:45

gimp-2.4

-rwxr-xr-x

1

ریشه

ریشه

3654020

2016-08-26

16:16

کوآنتا

-rwxr-xr-x

1

ریشه

ریشه

2928760

2016-09-10

14:31

gdbtui

-rwxr-xr-x

1

ریشه

ریشه

2928756

2016-09-10

14:31

gdb

-rwxr-xr-x

1

ریشه

ریشه

2602236

2016-10-10

12:56

خالص


-rwxr-xr-x

1

ریشه

ریشه

2304684

2016-10-10

12:56

مشتری rpcc

-rwxr-xr-x

1

ریشه

ریشه

2241832

2016-04-04

05:56

استعداد

-rwxr-xr-x

1

ریشه

ریشه

2202476

2016-10-10

12:56

smbcacls


استفاده های زیادی از نوع شامل پردازش از داده های جدولی، مانند نتایج حاصل از ls دستور بالا اگر اصطلاحات پایگاه داده را در جدول بالا اعمال کنیم، می گوییم که هر ردیف یک است رکورد و اینکه هر رکورد از چندین مورد تشکیل شده است زمینهمانند ویژگی های فایل، تعداد پیوندها، نام فایل، اندازه فایل و غیره. نوع قادر به پردازش فیلدهای فردی است. در شرایط پایگاه داده، ما می توانیم یک یا چند مورد را مشخص کنیم زمینه های کلیدی به عنوان استفاده کنید کلیدهای مرتب سازی. در مثال بالا، ما را مشخص می کنیم n و r گزینه هایی برای انجام مرتب سازی عددی معکوس و مشخص کردن -k 5 را به نوع از فیلد پنجم به عنوان کلید مرتب سازی استفاده کنید.

La k گزینه بسیار جالب است و دارای ویژگی های بسیاری است، اما ابتدا باید در مورد چگونگی صحبت کنیم نوع فیلدها را تعریف می کند. بیایید یک فایل متنی بسیار ساده متشکل از یک خط واحد حاوی نام نویسنده را در نظر بگیریم:



ویلیام شاتز

ویلیام شاتز


به طور پیش فرض، نوع این خط را دارای دو فیلد می بیند. فیلد اول شامل کاراکترهای زیر است:

"ویلیام"

و فیلد دوم شامل کاراکترهای زیر است:

"شات"

به این معنی که کاراکترهای فضای خالی (فضاها و زبانه ها) به عنوان جداکننده بین فیلدها استفاده می شوند و هنگام مرتب سازی، جداکننده ها در فیلد گنجانده می شوند.

نگاهی دوباره به خطی از ما ls خروجی، می بینیم که یک خط شامل هشت فیلد است و فیلد پنجم اندازه فایل است:



-rwxr-xr-x 1 root root 8234216 2016-04-07 17:42 inkscape

-rwxr-xr-x 1 root root 8234216 2016-04-07 17:42 inkscape


برای سری بعدی آزمایش‌های خود، اجازه دهید فایل زیر حاوی تاریخچه سه توزیع محبوب لینوکس منتشر شده از سال 2006 تا 2008 باشد. هر خط در فایل دارای سه قسمت است: نام توزیع، شماره نسخه و تاریخ انتشار در MM/DD. فرمت /YYYY:


سوس

10.2

12/07/2006

کلاه نمدی مردانه

10

11/25/2008

سوس

11.0

06/19/2008

اوبونتو

8.04

04/24/2008

کلاه نمدی مردانه

8

11/08/2007

سوس

10.3

10/04/2007

اوبونتو

6.10

10/26/2006

کلاه نمدی مردانه

7

05/31/2007

اوبونتو

7.10

10/18/2007

اوبونتو

7.04

04/19/2007

سوس

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.

در مرحله بعد، فایل را مرتب می کنیم و نتایج را مشاهده می کنیم:



[me@linuxbox

~]$

مرتب سازی 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

SUSE 10.1

05/11/2006

SUSE 10.2

12/07/2006

SUSE 10.3

10/04/2007

SUSE 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


خوب، بیشتر کار می کرد. مشکل در مرتب‌سازی شماره‌های نسخه فدورا رخ می‌دهد. از آنجایی که "1" قبل از "5" در مجموعه کاراکترها قرار می گیرد، نسخه "10" در بالا به پایان می رسد در حالی که نسخه "9" به پایین می رسد.

برای رفع این مشکل باید چندین کلید را مرتب کنیم. می خواهیم در فیلد اول مرتب سازی الفبایی و در فیلد دوم مرتب سازی عددی انجام دهیم. نوع اجازه می دهد تا


نمونه های متعدد از -k گزینه ای به طوری که کلیدهای مرتب سازی متعدد را می توان مشخص کرد. در واقع یک کلید ممکن است شامل محدوده ای از فیلدها باشد. اگر هیچ محدوده ای مشخص نشده باشد (همانطور که در نمونه های قبلی ما وجود داشت)، نوع از کلیدی استفاده می کند که با فیلد مشخص شده شروع می شود و تا انتهای خط امتداد می یابد. در اینجا نحو برای مرتب سازی چند کلیدی ما آمده است:



[me@linuxbox

~]$

مرتب سازی --key=1,1 --key=2n 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

SUSE 10.1

05/11/2006

SUSE 10.2

12/07/2006

SUSE 10.3

10/04/2007

SUSE 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 -k 2n دقیقاً معادل خواهد بود. در اولین نمونه از گزینه کلید، محدوده ای از فیلدها را برای درج در کلید اول مشخص کردیم. از آنجایی که می‌خواستیم مرتب‌سازی را فقط به اولین فیلد محدود کنیم، آن را مشخص کردیم 1,1 که به معنی "شروع از فیلد یک و پایان در میدان یک" است. در مورد دوم مشخص کردیم 2n، به این معنی که فیلد 2 کلید مرتب سازی است و مرتب سازی باید عددی باشد. یک حرف گزینه ممکن است در انتهای یک مشخص کننده کلید گنجانده شود تا نوع مرتب سازی را مشخص کند. این حروف گزینه همان گزینه های سراسری برای هستند نوع برنامه: b (جاهای خالی اول را نادیده بگیرید)، n (مرتب سازی عددی) r (مرتب سازی معکوس)، و غیره.

فیلد سوم در لیست ما حاوی تاریخ در قالب نامناسب برای مرتب سازی است. در رایانه‌ها، تاریخ‌ها معمولاً به ترتیب YYYY-MM-DD قالب‌بندی می‌شوند تا مرتب‌سازی زمانی آسان شود، اما تاریخ ما در قالب آمریکایی MM/DD/YYYY است. چگونه می توانیم این لیست را به ترتیب زمانی مرتب کنیم؟

خوشبختانه، نوع راهی فراهم می کند. گزینه کلید اجازه می دهد تا مشخصات جبران در داخل فیلدها، بنابراین می توانیم کلیدها را در فیلدها تعریف کنیم:



[me@linuxbox ~]$ مرتب سازی -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

فدورا 10 11/25/2008

اوبونتو 8.10 10/30/2008

[me@linuxbox ~]$ مرتب سازی -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

فدورا 10 11/25/2008

اوبونتو 8.10 10/30/2008


سوس

11.0

06/19/2008

کلاه نمدی مردانه

9

05/13/2008

اوبونتو

8.04

04/24/2008

کلاه نمدی مردانه

8

11/08/2007

اوبونتو

7.10

10/18/2007

سوس

10.3

10/04/2007

کلاه نمدی مردانه

7

05/31/2007

اوبونتو

7.04

04/19/2007

سوس

10.2

12/07/2006

اوبونتو

6.10

10/26/2006

کلاه نمدی مردانه

6

10/24/2006

اوبونتو

6.06

06/01/2006

سوس

10.1

05/11/2006

کلاه نمدی مردانه

5

03/20/2006


با مشخص کردن -k 3.7 ما دستور می دهیم نوع برای استفاده از کلید مرتب سازی که با نویسه هفتم در فیلد سوم شروع می شود، که مربوط به شروع سال است. به همین ترتیب مشخص می کنیم -k 3.1 و -k 3.4 برای جداسازی بخش های ماه و روز تاریخ. ما نیز اضافه می کنیم n و r گزینه هایی برای دستیابی به مرتب سازی عددی معکوس در b گزینه ای برای سرکوب فاصله های پیشرو (که اعداد آنها از خطی به خط دیگر متفاوت است و در نتیجه بر نتیجه مرتب سازی تأثیر می گذارد) در فیلد تاریخ گنجانده شده است.

برخی از فایل ها از برگه ها و فاصله ها به عنوان جداکننده فیلد استفاده نمی کنند. به عنوان مثال / etc / passwd

فایل:



[me@linuxbox ~]$ head /etc/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 ~]$ head /etc/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


فیلدهای این فایل با دو نقطه (:) پس چگونه این فایل را با استفاده از یک فیلد کلید مرتب کنیم؟ نوع فراهم می کند -t گزینه ای برای تعریف کاراکتر جداکننده فیلد. برای مرتب کردن passwd فایل در فیلد هفتم (پوسته پیش فرض حساب)، می توانیم این کار را انجام دهیم:


[me@linuxbox ~]$ مرتب کردن -t ':' -k 7 /etc/passwd | سر

من:x:1001:1001: خودم،،،:/home/me:/bin/bash

[me@linuxbox ~]$ مرتب کردن -t ':' -k 7 /etc/passwd | سر

من:x:1001:1001: خودم،،،:/home/me:/bin/bash


root:x:0:0:root:/root:/bin/bash dhcp:x:101:102::/nonexistent:/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/fase 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

root:x:0:0:root:/root:/bin/bash dhcp:x:101:102::/nonexistent:/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/fase 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


با تعیین کاراکتر کولون به عنوان جداکننده فیلد، می توانیم در فیلد هفتم مرتب سازی کنیم.


برترین سیستم عامل Cloud Computing در OnWorks: