เรียงคอลัมน์ที่ถูกจัดเรียง


1

ฉันมีโปรแกรมที่แสดงผลเช่นนี้

 #         Status   VAL1   VAL2   Description
 1      some text    2.5    4.4   Some long other text
 5    some text 2   14.5    2.0   Some long other text 2
12    some text 3  222.6   24.4   Some long other text 3
19    some text 4    3.4    1.5   Some long other text 4
21    some text 5   55.4   10.6   Some long other text 5
32    some text 6    2.9    9.4   Some long other text 6

ฉันต้องการเรียงลำดับตามคอลัมน์ VAL2 ฉันลองด้วยsort -k 4แต่เมื่อมีช่องว่างในคอลัมน์สถานะsortสับสน

มีวิธีแก้ไขไหม อาจจะส่งผ่านหมายเลขอักขระแทนหมายเลขฟิลด์หรือไม่


ใช่ว่าสามารถทำได้เงยหน้าขึ้นมองตัวเลือกในการ-k sort(1)ตรวจสอบให้แน่ใจว่าไฟล์อินพุตไม่มีแท็บเนื่องจากจะทำให้การนับของคุณ ( expand(1))
vonbrand

@ vonbrand มันจะไม่ทำงานอย่างนั้นเพราะการจัดเรียงจะใช้ลำดับของช่องว่างใด ๆ เนื่องจากตัวคั่นฟิลด์และคุณไม่สามารถคาดเดาได้ว่าคอลัมน์ใดจะอยู่ในคอลัมน์ด้านบน ยิ่งไปกว่านั้นมันจะไม่เป็น VAL2
เร่ง

@rush เพียงบอกการเรียงลำดับว่าตัวคั่นเขตข้อมูลเป็นสิ่งที่เป็นไปไม่ได้และนับจำนวนอักขระใน "เขตข้อมูล" บรรทัดแรก (เต็มบรรทัด)
vonbrand

คำตอบ:


2

จัดเรียงตามคอลัมน์ชดเชย:

sort -k1.27g

โปรดทราบว่าการgตั้งค่าสถานะด้านบน (สำหรับการเรียงลำดับตัวเลขทั่วไป) ไม่ใช่มาตรฐานดังนั้นอาจไม่รองรับการใช้การเรียงลำดับของคุณ

ด้วยตัวอย่างข้อมูลเฉพาะนั้นคุณสามารถไปกับ:

LC_ALL=C sort -k1.27

นั่นคือการเรียงลำดับตัวอักษรและตัวเลขและใช้โลแคล C เพื่อให้แน่ใจว่าช่องว่างนำหน้าจะไม่ถูกละเว้นในการเรียงลำดับ ดังนั้นสำหรับตัวอย่างเช่น[ ]4.4การเรียงลำดับก่อน24.4แม้ว่าทุกประเภทหลัง42

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