จัดเรียงไฟล์ตามคอลัมน์แรกและคอลัมน์ที่สอง


13

ฉันจะจัดการไฟล์ข้อความที่คั่นด้วยแท็บสองคอลัมน์โดยเรียงลำดับตามองค์ประกอบแรกของคอลัมน์ที่สองได้อย่างไร (เฉพาะในกรณีที่องค์ประกอบคอลัมน์แรกเหมือนกัน)

กันตัวอย่าง:

ไฟล์อินพุต 1

A   1-2
A   6-8
A   3-4
B   7-10
B   5-9

ผลลัพธ์ที่คาดหวัง: ไฟล์ 2

A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

คำตอบ:


22

การใช้งานsortของ-kตัวเลือกในการจัดเรียงสินค้า (หลาย) คอลัมน์ในครั้งเดียว:

$ sort -k1,1 -k2n input
A   1-2
A   3-4
A   6-8
B   5-9
B   7-10

-k1,1เรียงลำดับตามคอลัมน์แรกก่อนจากนั้น-k2nตามด้วยตัวเลขที่สองเมื่อคอลัมน์แรกถูกเชื่อมโยงดังนั้นคุณจะได้ผลลัพธ์ตามลำดับที่คุณต้องการ: การเรียงลำดับตามองค์ประกอบแรกของคอลัมน์ที่สองเฉพาะในกรณีที่องค์ประกอบคอลัมน์แรกเหมือนกัน

เมื่อเรียงลำดับตัวเลขมันจะทำการตรวจสอบสนามจนกระทั่งมันหยุดเป็นตัวเลขดังนั้นมันจึงเป็นการเปรียบเทียบองค์ประกอบแรกของมัน

เมื่อคีย์สองปุ่มเปรียบเทียบกันให้sortเปรียบเทียบทั้งบรรทัดโดยละเอียดเป็นการเปรียบเทียบแบบสุดท้าย ยกตัวอย่างเช่นในA 1-10VS A 1-2, ปุ่มแรกเหมือนกัน ( Aสตริง) และกุญแจดอกที่สองเช่นกัน (ทั้งสองจะถือว่าเป็นตัวเลข1) ดังนั้นแล้วsortเปรียบเทียบA 1-10เทียบA 1-2lexically และหลังเป็นใหญ่เป็นประเภทหลัง2 1การดำเนินงานของกนูsortมี-VตัวเลือกหรือVธงที่สำคัญในการดำเนินการรุ่นเรียงลำดับซึ่งเป็นเหมือนการเปรียบเทียบคำศัพท์ยกเว้นลำดับของตัวเลขทศนิยมว่าภายในสตริงจะเปรียบเทียบตัวเลขจึงsort -k1,1 -k2VจะเรียงลำดับA 1-10หลังจากA 1-2เพราะเป็นตัวเลขที่มีค่ามากกว่า102


¹ในทางเทคนิค-k2หมายถึงส่วนของบรรทัดที่ขึ้นต้นด้วยฟิลด์ที่สอง (หลังจากการเปลี่ยนครั้งแรกจากแบบไม่ว่างเปล่าไปเป็นช่องว่าง) และสิ้นสุดที่ส่วนท้ายของบรรทัด แต่ด้วยnธงซึ่งเทียบเท่ากับ-k2,2nส่วนนำเท่านั้น ที่ถือว่าเป็นตัวเลข

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