คำสั่ง sort ในยูนิกซ์ที่มีการเรียงลำดับตัวเลข


10

ฉันมี file1:

"$lvl=57"
"$lvl=20"
"$lvl=48"
"$lvl=17"
"$lvl=58"

File2 ฉันต้องการ:

"$lvl=17"
"$lvl=20"
"$lvl=48"
"$lvl=57"
"$lvl=58"

เรียงตามลำดับตัวเลขของ file1


เมื่อฉันใช้ Unix ธรรมดาsortใน File1 ของคุณโดยไม่มีตัวเลือกฉันจะได้รับ File2 ของคุณ คุณกำลังทำอะไรที่แตกต่าง คุณจะทิ้งอะไรจากคำถามนี้
สกอตต์

คำตอบ:


17

ฉันชอบ -V --version-sort: มันทำงานได้ดีมากในหลาย ๆ สถานการณ์ที่ผสมสตริงและตัวเลข

sort -V

ฉันใช้ตัวเลือกนี้บ่อยมาก ...

ในทิศทางที่บางรุ่นจัดเรียงls -vls


10

คุณต้องบอกsort -nให้เรียงลำดับหลังจาก=:

sort -t = -k 2n

ฉันเพิ่งดูสิ่งนี้ ^^ แต่อีกอันหนึ่ง Q. ทำอะไร-k2n? นั่นเกี่ยวข้องกับการเรียงลำดับตัวเลขหรือไม่ ขอบคุณ.
αғsнιη

2
@KasiyA -kกำหนดคีย์การเรียงลำดับ ดูหน้าคนสำหรับรายละเอียด -k2nกำหนดคีย์การเรียงลำดับที่เริ่มต้นที่ฟิลด์ที่สองและสิ้นสุดที่ส่วนท้ายของบรรทัด
Stéphane Chazelas

0

ใช้การเรียงลำดับ:

sort -n file1 > file2

-n, - ตัวเลขเรียงลำดับ
เปรียบเทียบตามค่าตัวเลขสตริง

 sort -g file1 > file 2

-g, --general-numeric-sort


3
ไม่บรรทัดเหล่านั้นมีการจัดอันดับเท่ากันsort -nเนื่องจากไม่ได้ขึ้นต้นด้วยตัวเลข เหตุผลที่เรียงลำดับเหล่านี้คือการเรียงลำดับแบบเต็มบรรทัดสุดท้าย (ทำโดยคำศัพท์ไม่ใช่ตัวเลข) สำหรับบรรทัดที่มีอันดับเดียวกัน ที่จะเรียงลำดับก่อน"$lvl=17" "$lvl=2"
Stéphane Chazelas

@ StéphaneChazelasขอบคุณที่ชี้ให้เห็น
Hackaholic

หากต้องการถอดความ-nและ-gซ้ำซ้อนที่นี่เนื่องจากอินพุตไม่เป็นตัวเลข ดังนั้นคำตอบนี้ทำให้เข้าใจผิดดังนั้น downvote (โปรดทราบว่า-gและตัวเลือกแบบยาวเป็นแบบเฉพาะของ GNU)
Stéphane Chazelas

แต่ -g นั้นดีตัวเลขทั่วไปเรียงลำดับ
Hackaholic

ยังคงใช้สำหรับการเรียงค่าตัวเลขความแตกต่าง-nคือไม่ จำกัด จำนวนเต็มทศนิยม นั่นจะยังคงจัดเรียง"$lvl=17"ก่อน"$lvl=2"เป็นส่วนหนึ่งของการเรียงลำดับสุดท้าย
Stéphane Chazelas


-1

sort -nคือสิ่งที่คุณต้องการใช้ มันเรียงลำดับตามที่เราเรียงลำดับหมายเลขsort -k 2 -n file1


2
แต่ OP ต้องการเรียงลำดับจากน้อยไปมากซึ่งเป็นค่าเริ่มต้น เหตุใดคุณจึงแนะนำลำดับย้อนกลับ
G-Man กล่าวว่า 'Reinstate Monica'

ด้านบนถูกต้องเมื่อฟิลด์ถูกคั่นด้วยแท็บหรือช่องว่างและจะไม่ทำงานในกรณีของ OP
αғsнιη
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.