msort(1)
ถูกออกแบบมาเพื่อให้สามารถเรียงลำดับไฟล์ด้วยการบันทึกหลายบรรทัด มันมีกุยตัวเลือกเช่นเดียวกับรุ่นบรรทัดคำสั่งปกติและใช้งานได้สำหรับมนุษย์ (อย่างน้อยมนุษย์ที่ชอบอ่านคู่มืออย่างระมัดระวังและมองหาตัวอย่าง ... )
AFAICT คุณไม่สามารถใช้รูปแบบโดยพลการสำหรับบันทึกได้ดังนั้นหากบันทึกของคุณมีขนาดคงที่ (เป็นไบต์ไม่ใช่อักขระหรือบรรทัด) msort
ไม่มี-b
ตัวเลือกสำหรับระเบียนที่เป็นบล็อกของบรรทัดคั่นด้วยบรรทัดว่าง
คุณสามารถแปลงอินพุตของคุณเป็นรูปแบบที่จะทำงาน-b
ได้อย่างง่ายดายโดยใส่บรรทัดว่างไว้ข้างหน้าทุกอัน###...
(ยกเว้นอันแรก)
ตามค่าเริ่มต้นจะพิมพ์สถิติบน stderr ดังนั้นอย่างน้อยก็ง่ายที่จะบอกเมื่อไม่ได้เรียงลำดับเพราะคิดว่าอินพุตทั้งหมดเป็นบันทึกเดียว
msort
ทำงานกับข้อมูลของคุณ sed
คำสั่ง prepends ขึ้นบรรทัดใหม่ให้ทุก#+
สายยกเว้นสาย 1. -w
เรียงลำดับระเบียนทั้งหมด (lexicographically) มีตัวเลือกสำหรับเลือกส่วนของระเบียนที่จะใช้เป็นคีย์ แต่ฉันไม่ต้องการ
ฉันยังทิ้งการขึ้นบรรทัดใหม่พิเศษ
$ sed '2,$ s/^#\+/\n&/' unsorted.records | msort -b -w 2>/dev/null
####################################
KEY1
VAL11
VAL12
VAL13
VAL14
####################################
KEY2
VAL21
VAL22
VAL23
VAL24
####################################
KEY3
VAL31
VAL32
VAL33
VAL34
ฉันไม่มีโชคกับ-r '#'
การใช้สิ่งนั้นเป็นตัวแยกเร็กคอร์ด มันคิดว่าไฟล์ทั้งหมดเป็นหนึ่งระเบียน