ฉันกำลังพยายามจัดเรียงสตริงตัวอักษรและตัวเลขตามตัวอักษรและตัวเลขด้วยวิธี "ใช้งานง่าย"/เป็นธรรมชาติโดยใช้คำสั่ง unix sort
แต่ไม่สามารถจัดเรียงได้อย่างถูกต้อง ฉันมีไฟล์นี้:
$ cat ~/headers
@42EBKAAXX090828:6:100:1699:328/2
@42EBKAAXX090828:6:10:1077:1883/2
@42EBKAAXX090828:6:102:785:808/2
ฉันต้องการจัดเรียงตามตัวอักษร โดยที่ @42EBKAAXX090828:6:10:...
อยู่อันดับแรกตามสัญชาตญาณ (เนื่องจาก 10
น้อยกว่า 100
และ 102
) อันดับสองคือ @42EBKAAXX090828:6:100...
และอันดับสามคือ @42EBKAAXX090828:6:102:204:1871/2
ฉันรู้ว่าแนะนำให้เรียงลำดับตำแหน่งเฉพาะภายในบรรทัด แต่ตำแหน่งของ :
ที่นี่อาจแตกต่างกัน ดังนั้นนี่จึงไม่ใช่วิธีแก้ปัญหาทั่วไปและใช้งานได้ที่นี่
ฉันเหนื่อย:
sort --stable -k1,1 ~/headers > foo
โดยมีพารามิเตอร์ -n
และ -u
ผสมกันหลากหลาย แต่ไม่ได้ให้ลำดับที่ถูกต้อง
สิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพทั้งจาก bash โดยใช้ sort
หรือจาก Python ฉันต้องการนำไปใช้กับไฟล์ที่มีขนาดประมาณ 4-5 GB ดังนั้นจึงมีบรรทัดหลายล้านบรรทัด
ขอบคุณ!
@42EBKAAXX09082*7*:6:100:1699:328/2
และ@42EBKAAXX09082*8*:6:100:1699:328/2
(*
s เพื่อเน้นย้ำ) อย่างไร พวกเขาเรียงลำดับเหมือนกันหรือเปล่า? (เช่นเฉพาะฟิลด์ที่ 3 เท่านั้นที่เกี่ยวข้อง) คำตอบของ @ JonathanM นั้นดีที่สุด ไม่อย่างนั้นก็ลองดูของฉันสิ - person tobyodavies   schedule 06.12.2011