เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

ประเภท

การขอ ประเภท โปรแกรมจะเรียงลำดับเนื้อหาของอินพุตมาตรฐาน หรือไฟล์หนึ่งไฟล์ขึ้นไปที่ระบุในบรรทัดคำสั่ง และส่งผลไปยังเอาต์พุตมาตรฐาน โดยใช้เทคนิคเดียวกับที่เราใช้ แมวเราสามารถสาธิตการประมวลผลอินพุตมาตรฐานได้โดยตรงจากแป้นพิมพ์:



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

cba

[me@linuxbox ~]$ แมว foo.txt

abc

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

cba

[me@linuxbox ~]$ แมว foo.txt

abc


หลังจากป้อนคำสั่งแล้ว เราจะพิมพ์ตัวอักษร “c”, “b” และ “a” ตามด้วย . อีกครั้ง Ctrl-d เพื่อระบุจุดสิ้นสุดของไฟล์ จากนั้นเราดูไฟล์ผลลัพธ์และเห็นว่าขณะนี้บรรทัดต่างๆ ปรากฏขึ้นในลำดับที่จัดเรียง

ตั้งแต่ ประเภท สามารถรับหลายไฟล์บนบรรทัดคำสั่งเป็นอาร์กิวเมนต์ได้ ผสาน หลายไฟล์รวมกันเป็นไฟล์เดียว ตัวอย่างเช่น หากเรามีไฟล์ข้อความสามไฟล์และต้องการรวมเป็นไฟล์ที่จัดเรียงไฟล์เดียว เราสามารถดำเนินการดังนี้:



sort file1.txt file2.txt file3.txt > final_sorted_list.txt

sort file1.txt file2.txt file3.txt > final_sorted_list.txt


sort มีตัวเลือกที่น่าสนใจมากมาย นี่คือรายการบางส่วน:


ตาราง 20-1: ตัวเลือกการเรียงลำดับทั่วไป


ตัวเลือกเสริม (Option)

ตัวเลือกยาว

รายละเอียด

-b

--ignore-ชั้นนำช่องว่าง

โดยค่าเริ่มต้น การเรียงลำดับจะดำเนินการบน

ทั้งสาย เริ่มต้นด้วย

อักขระตัวแรกในบรรทัด นี้

ตัวเลือกทำให้การเรียงลำดับละเว้น

ช่องว่างชั้นนำในเส้นและ

คำนวณการเรียงลำดับตามครั้งแรก

อักขระที่ไม่ใช่ช่องว่างบน

เส้น

-f

--ละเว้นกรณี

ทำให้การเรียงลำดับไม่คำนึงถึงขนาดตัวพิมพ์


-n

--การเรียงลำดับตัวเลข

ดำเนินการเรียงลำดับตามการประเมินตัวเลขของสตริง การใช้ตัวเลือกนี้ช่วยให้สามารถจัดเรียงค่าตัวเลขแทนค่าตัวอักษรได้

-r

--ย้อนกลับ

เรียงลำดับกลับกัน ผลลัพธ์อยู่ใน

ลงมากกว่าขึ้น

สั่ง

-k

--คีย์=field1[,field2]

เรียงตามช่องคีย์ที่อยู่

จาก field1 ไปยัง field2 แทนที่จะเป็น

ทั้งสาย. ดูการสนทนาด้านล่าง

-m

--ผสาน

ถือว่าแต่ละอาร์กิวเมนต์เป็นชื่อ

ของไฟล์ที่จัดไว้ล่วงหน้า รวมหลายรายการ

ไฟล์เป็นผลลัพธ์ที่เรียงลำดับเดียว

โดยไม่ต้องดำเนินการเพิ่มเติมใดๆ

การเรียงลำดับ

-o

--เอาท์พุท=ไฟล์

ส่งออกที่เรียงลำดับไปยัง ไฟล์ ค่อนข้าง

กว่าเอาต์พุตมาตรฐาน

-t

--field-คั่น=ถัง

กำหนดตัวคั่นฟิลด์

อักขระ. โดยค่าเริ่มต้น ฟิลด์คือ

คั่นด้วยช่องว่างหรือแท็บ


แม้ว่าตัวเลือกส่วนใหญ่ข้างต้นจะค่อนข้างอธิบายได้ด้วยตนเอง แต่บางตัวเลือกก็ไม่เป็นเช่นนั้น ก่อนอื่น มาดูที่ -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.dll

48 /usr/share/application-registry.XNUMX

[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.dll

48 /usr/share/application-registry.XNUMX


ในตัวอย่างนี้ เราไพพ์ผลลัพธ์ลงใน หัว เพื่อจำกัดผลลัพธ์ไว้ที่สิบบรรทัดแรก เราสามารถสร้างรายการที่เรียงเป็นตัวเลขเพื่อแสดงผู้บริโภคพื้นที่ที่ใหญ่ที่สุดสิบคนด้วยวิธีนี้:



[me@linuxbox ~]$ du -s /usr/share/* | sort -nr | ศีรษะ

509940 /usr/share/locale-langpack

242660 /usr/share/doc

197560 /usr/share/fonts

179144 /usr/share/คำพังเพย

146764 /usr/share/myspell

144304 /usr/share/gimp

135880 /usr/share/dict

76508 /usr/share/icons

68072 /usr/share/apps

62844 /usr/share/fomatic

[me@linuxbox ~]$ du -s /usr/share/* | sort -nr | ศีรษะ

509940 /usr/share/locale-langpack

242660 /usr/share/doc

197560 /usr/share/fonts

179144 /usr/share/คำพังเพย

146764 /usr/share/myspell

144304 /usr/share/gimp

135880 /usr/share/dict

76508 /usr/share/icons

68072 /usr/share/apps

62844 /usr/share/fomatic


โดยใช้ -ไม่มี ตัวเลือก เราสร้างการเรียงลำดับตัวเลขย้อนกลับ โดยค่าที่ใหญ่ที่สุดจะปรากฏเป็นอันดับแรกในผลลัพธ์ การเรียงลำดับนี้ใช้ได้เนื่องจากค่าตัวเลขเกิดขึ้นที่จุดเริ่มต้นของแต่ละบรรทัด แต่ถ้าเราต้องการจัดเรียงรายการตามค่าที่พบในบรรทัดล่ะ ตัวอย่างเช่น ผลลัพธ์ของ an 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

a2p

-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

แอด2ไลน์

-rwxr-xr-x

1

ราก

ราก

489704

2016-10-09

17:02

adept_batch


ละเลยชั่วขณะหนึ่งว่า ls สามารถจัดเรียงผลลัพธ์ตามขนาด เราสามารถใช้ ประเภท เพื่อจัดเรียงรายการนี้ตามขนาดไฟล์ด้วย:


ภาพ

[me@linuxbox ~]$ ls -l /usr/bin | sort -nr -k 5 | ศีรษะ


-rwxr-xr-x

1

ราก

ราก

8234216

2016-04-07

17:42

Inkscape

-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

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

rpclient

-rwxr-xr-x

1

ราก

ราก

2241832

2016-04-04

05:56

ความถนัด

-rwxr-xr-x

1

ราก

ราก

2202476

2016-10-10

12:56

smbcacls


การใช้งานหลายอย่างของ ประเภท เกี่ยวข้องกับการประมวลผลของ ข้อมูลแบบตารางเช่นผลของการ ls คำสั่งด้านบน หากเราใช้คำศัพท์ฐานข้อมูลกับตารางด้านบน เราจะบอกว่าแต่ละแถวคือ a ระเบียน และแต่ละบันทึกประกอบด้วยหลายรายการ ทุ่งเช่น แอตทริบิวต์ของไฟล์ จำนวนลิงก์ ชื่อไฟล์ ขนาดไฟล์ เป็นต้น ประเภท สามารถประมวลผลแต่ละฟิลด์ได้ ในแง่ฐานข้อมูล เราสามารถระบุได้ตั้งแต่หนึ่งรายการขึ้นไป คีย์ฟิลด์ เพื่อใช้เป็น จัดเรียงคีย์. ในตัวอย่างข้างต้น เราระบุ n และ r ตัวเลือกเพื่อดำเนินการเรียงลำดับตัวเลขย้อนกลับและระบุ -เค 5 ที่จะทำให้ ประเภท ใช้ฟิลด์ที่ห้าเป็นคีย์สำหรับการเรียงลำดับ

การขอ k option น่าสนใจมากและมีคุณสมบัติมากมาย แต่ก่อนอื่นเราต้องพูดถึงวิธีการ ประเภท กำหนดฟิลด์ ลองพิจารณาไฟล์ข้อความธรรมดาๆ ที่ประกอบด้วยบรรทัดเดียวที่มีชื่อผู้เขียน:



วิลเลียม ชอตส์

วิลเลียม ชอตส์


โดยค่าเริ่มต้น ประเภท เห็นบรรทัดนี้เป็นสองฟิลด์ ช่องแรกประกอบด้วยตัวอักษร:

“วิลเลียม”

และช่องที่สองมีอักขระ:

“ชอต”

หมายความว่าอักขระช่องว่าง (ช่องว่างและแท็บ) ถูกใช้เป็นตัวคั่นระหว่างฟิลด์ และตัวคั่นจะรวมอยู่ในฟิลด์เมื่อทำการเรียงลำดับ

ดูสายจากเราอีกครั้ง ls ผลลัพธ์ เราจะเห็นว่าบรรทัดหนึ่งประกอบด้วยแปดฟิลด์ และฟิลด์ที่ห้าคือขนาดไฟล์:



-rwxr-xr-x 1 รูทรูท 8234216 2016-04-07 17:42 inkscape

-rwxr-xr-x 1 รูทรูท 8234216 2016-04-07 17:42 inkscape


สำหรับชุดการทดลองต่อไปของเรา ให้พิจารณาไฟล์ต่อไปนี้ซึ่งมีประวัติของลีนุกซ์รุ่นยอดนิยมสามรุ่นซึ่งเปิดตัวตั้งแต่ปี 2006 ถึง พ.ศ. 2008 แต่ละบรรทัดในไฟล์มีสามฟิลด์: ชื่อการแจกจ่าย หมายเลขเวอร์ชัน และวันที่เผยแพร่ในหน่วย MM/DD /YYYY รูปแบบ:


SUSE

10.2

12/07/2006

Fedora

10

11/25/2008

SUSE

11.0

06/19/2008

อูบุนตู

8.04

04/24/2008

Fedora

8

11/08/2007

SUSE

10.3

10/04/2007

อูบุนตู

6.10

10/26/2006

Fedora

7

05/31/2007

อูบุนตู

7.10

10/18/2007

อูบุนตู

7.04

04/19/2007

SUSE

10.1

05/11/2006

Fedora

6

10/24/2006

Fedora

9

05/13/2008

อูบุนตู

6.06

06/01/2006

อูบุนตู

8.10

10/30/2008

Fedora

5

03/20/2006


การใช้โปรแกรมแก้ไขข้อความ (บางที เป็นกลุ่ม) เราจะป้อนข้อมูลนี้และตั้งชื่อไฟล์ผลลัพธ์ distros.txt.

ต่อไป เราจะลองจัดเรียงไฟล์และสังเกตผลลัพธ์:



[me@linuxbox

-

จัดเรียง distros.txt

Fedora 10

11/25/2008

Fedora 5

03/20/2006

Fedora 6

10/24/2006

Fedora 7

05/31/2007

Fedora 8

11/08/2007

Fedora 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" จะอยู่ด้านล่าง

เพื่อแก้ไขปัญหานี้ เราจะต้องเรียงลำดับหลายคีย์ เราต้องการดำเนินการเรียงลำดับตามตัวอักษรในฟิลด์แรก จากนั้นจึงทำการเรียงลำดับตัวเลขในฟิลด์ที่สอง ประเภท ช่วยให้


หลายกรณีของ -k ตัวเลือกเพื่อให้สามารถระบุคีย์การเรียงลำดับได้หลายคีย์ อันที่จริง คีย์อาจรวมถึงช่วงของฟิลด์ต่างๆ หากไม่มีการระบุช่วง (เช่นในตัวอย่างก่อนหน้านี้) ประเภท ใช้คีย์ที่ขึ้นต้นด้วยฟิลด์ที่ระบุและขยายไปจนสุดบรรทัด นี่คือไวยากรณ์สำหรับการเรียงลำดับแบบหลายคีย์ของเรา:



[me@linuxbox

-

เรียงลำดับ --key=1,1 --key=2n distros.txt

Fedora 5

03/20/2006

Fedora 6

10/24/2006

Fedora 7

05/31/2007

Fedora 8

11/08/2007

Fedora 9

05/13/2008

Fedora 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


แม้ว่าเราจะใช้ตัวเลือกแบบยาวเพื่อความชัดเจน -เค 1,1 -เค 2n จะเทียบเท่ากันเลยทีเดียว ในตัวอย่างแรกของตัวเลือกคีย์ เราได้ระบุช่วงของฟิลด์ที่จะรวมไว้ในคีย์แรก เนื่องจากเราต้องการจำกัดการเรียงลำดับให้เหลือเพียงฟิลด์แรก เราจึงระบุ - fied 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

Fedora 10 11/25/2008

อูบุนตู 8.10 10/30/2008

[me@linuxbox ~]$ เรียงลำดับ -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

Fedora 10 11/25/2008

อูบุนตู 8.10 10/30/2008


SUSE

11.0

06/19/2008

Fedora

9

05/13/2008

อูบุนตู

8.04

04/24/2008

Fedora

8

11/08/2007

อูบุนตู

7.10

10/18/2007

SUSE

10.3

10/04/2007

Fedora

7

05/31/2007

อูบุนตู

7.04

04/19/2007

SUSE

10.2

12/07/2006

อูบุนตู

6.10

10/26/2006

Fedora

6

10/24/2006

อูบุนตู

6.06

06/01/2006

SUSE

10.1

05/11/2006

Fedora

5

03/20/2006


โดยระบุ -เค 3.7 เราสั่งสอน ประเภท เพื่อใช้คีย์การเรียงลำดับที่เริ่มต้นที่อักขระตัวที่เจ็ดภายในฟิลด์ที่สาม ซึ่งสอดคล้องกับจุดเริ่มต้นของปี ในทำนองเดียวกันเราระบุ -เค 3.1 และ -เค 3.4 เพื่อแยกส่วนเดือนและวันของวันที่ นอกจากนี้เรายังเพิ่ม n และ r ตัวเลือกเพื่อให้ได้การเรียงลำดับตัวเลขย้อนกลับ NS b รวมตัวเลือกเพื่อระงับช่องว่างนำหน้า (ซึ่งมีตัวเลขแตกต่างกันไปในแต่ละบรรทัด ซึ่งจะส่งผลต่อผลลัพธ์ของการเรียงลำดับ) ในฟิลด์วันที่

ไฟล์บางไฟล์ไม่ได้ใช้แท็บและช่องว่างเป็นตัวคั่นฟิลด์ ตัวอย่างเช่น / etc / passwd

ไฟล์:



[me@linuxbox ~]$ หัว /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 ~]$ หัว /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 ~]$ sort -t ':' -k 7 /etc/passwd | ศีรษะ

me:x:1001:1001:ตัวฉัน,,,:/home/me:/bin/bash

[me@linuxbox ~]$ sort -t ':' -k 7 /etc/passwd | ศีรษะ

me:x:1001:1001:ตัวฉัน,,,:/home/me:/bin/bash


รูท:x:0:0:รูท:/รูท:/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:รูท:/รูท:/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: