ฉันใช้การเรียงลำดับยูนิกซ์เพื่อจัดเรียงไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคที่มีหลายคอลัมน์ จนถึงตอนนี้สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับการเรียงลำดับข้อมูลไม่ว่าจะเป็นตัวเลขหรือตามลำดับตัวอักษร:
ไฟล์ตัวอย่างก่อนการเรียงลำดับใด ๆ :
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
จัดเรียงไฟล์: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
ผลการจัดเรียง:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
นี่คือปัญหา: ฉันต้องการจัดเรียงคอลัมน์ 2 ตามการเรียงลำดับที่กำหนดเองซึ่งหมายถึงฉันต้องการให้สหรัฐอเมริกาก่อนจากนั้นก็แคนาดาและบาฮามาส:
การจัดเรียงที่ต้องการ:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
มีวิธีการเรียงลำดับยูนิกซ์เรียงลำดับแบบกำหนดเองที่สามารถใช้? สิ่งที่ต้องการ:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
ขอบคุณ!
t
แทนที่จะเป็นf
ในบรรทัดสุดท้ายหรือไม่
join
คำสั่ง แต่คุณสามารถเรียงลำดับได้มากมาย - ไฟล์อินพุตสำหรับjoin
จะต้องเรียงลำดับเดียวและคุณจะใช้sort
อีกครั้งเพื่อใส่ข้อมูลลงใน คำสั่งซื้ออื่น (และการสูญเสียคอลัมน์เรียงลำดับเป็นขั้นตอนหลังการเรียงลำดับ)