วิธีการจัดเรียงสตริงที่รวมกับสตริง + ตัวเลขโดยใช้สคริปต์ทุบตี?


27

นี่คือข้อมูลที่ฉันต้องการเรียงลำดับ แต่sortปฏิบัติต่อตัวเลขกับสตริงข้อมูลที่ไม่เรียงตามที่ฉันคาดไว้

/ home / files / profile1
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9

ฉันต้องการเรียงลำดับนี้เป็น

/ home / files / profile1
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16

มีวิธีที่ดีโดยสคริปต์ทุบตี? ฉันไม่สามารถใช้สคริปต์ทับทิมหรืองูหลามได้ที่นี่


ลองใช้ "sort -nd"
bobah

1
@bobah, "sort: options` -dn 'ไม่เข้ากัน "
maxschlepzig

10
sort -Vจะทำ.
ธ อร์

2
@Thor ความคิดเห็นของคุณน่าจะเป็นคำตอบที่ดี
Peter.O

คำตอบ:


21

คุณสามารถใช้ตัวละครแมวมองชั่วคราวเพื่อกำหนดจำนวน:

$ sed 's/\([0-9]\)/;\1/' log | sort -n -t\; -k2,2 | tr -d ';'

ที่นี่ตัวละครแมวมองคือ ';' - ต้องไม่เป็นส่วนหนึ่งของชื่อไฟล์ที่คุณต้องการเรียงลำดับ แต่คุณสามารถแลกเปลี่ยน ';' กับตัวละครที่คุณชอบ คุณต้องเปลี่ยนsed, sortและtrส่วนหนึ่งแล้วตาม

ไพพ์ทำงานดังนี้: sedคำสั่งแทรก Sentinel ก่อนหมายเลขใด ๆsortคำสั่งจะแปล Sentinel เป็นตัวคั่นฟิลด์เรียงลำดับฟิลด์ที่สองเป็นคีย์เรียงลำดับตัวเลขและtrคำสั่งลบ Sentinel อีกครั้ง

และlogหมายถึงแฟ้มใส่ - sedคุณยังสามารถท่อป้อนข้อมูลของคุณลงใน


ผมชอบวิธีที่คุณสามารถแก้ปัญหาได้ :)
SHW

44

นี่คล้ายกับคำถามนี้มาก ปัญหาคือคุณมีเขตข้อมูลตัวอักษรและตัวเลขที่คุณกำลังเรียงลำดับและ-nไม่ถือว่าเป็นเรื่องที่สมเหตุสมผล แต่การจัดเรียงเวอร์ชัน ( -V) ทำ ดังนั้นการใช้งาน:

sort -V

โปรดทราบว่าคุณลักษณะนี้ได้รับการสนับสนุนในขณะนี้โดยการใช้งานการเรียงลำดับ GNU, FreeBSD และ OpenBSD


คุณรู้หรือไม่ว่าอุปกรณ์พกพานี้เป็นอย่างไร ตัวเลือกนี้ดูเหมือนจะไม่ได้เป็นส่วนหนึ่งของข้อมูลจำเพาะ POSIX
เออร์เนสต์มี. ค.

@ErnestA: คุณพูดถูกนี่คือ GNU sort solution ที่เฉพาะเจาะจง เพิ่มบันทึกย่อ
Thor

@ErnestA: ฉันดูเหมือน FreeBSD และ OpenBSD ได้เพิ่มคุณสมบัตินี้
Thor

และมันจะไม่ทำงานหากตัวเลขมีคำนำหน้าต่างกัน
Dante

1
สำหรับผู้อ่าน: โปรดทราบว่านี่คือเมืองหลวง V! ใช้ไม่ได้sort -V sort -vมันยากที่จะบอกได้อย่างรวดเร็วก่อน
Gabriel Staples

7

หากชื่อไฟล์ทั้งหมดของคุณมีคำนำหน้าเหมือนกันก่อนส่วนตัวเลขสุดท้ายให้ละเว้นมันเมื่อเรียงลำดับ

sort -k 1.20n

(20 คือตำแหน่งของตัวเลขตัวแรกมันคือหนึ่งบวกความยาวของ/home/files/profile)

ถ้าคุณมีชิ้นส่วนที่ไม่ใช่ตัวเลขแตกต่างกันหลายแทรกแมวมอง

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