นี่คือวิธีหนึ่งในการแก้ปัญหานี้:
- เพิ่มคอลัมน์ที่สองโดยแปลงเวลาเป็นหน่วยเดียวกัน
- เรียงลำดับอินพุตในคอลัมน์ที่สอง
- วางคอลัมน์ที่สอง
คุณสามารถทำขั้นตอนที่ 1 ด้วยสคริปต์ awk สคริปต์นี้จะแปลงหน่วยเวลาเป็นนาโนวินาที:
{
time = $1;
sub(/[a-z]+$/, "", time);
unit = $1;
sub(/^[^a-z]+/, "", unit);
# convert to nanoseconds
if (unit == "us") {
time *= 1000;
} else if (unit == "ms") {
time *= 1000000;
} else if (unit == "s") {
time *= 1000000000;
}
print $1, time
}
หากคุณบันทึกไว้ในไฟล์ convert.awk
จากนั้นคุณสามารถทำตามขั้นตอนที่ 1-3 ด้วยขั้นตอนนี้:
awk -f convert.awk input.txt | sort -g -k2 | cut -f1 -d' '
-g
แทน -n
มีความจำเป็นในกรณีที่ตัวเลขบางตัวแสดงในรูปแบบเลขชี้กำลัง (ให้เครดิตกับ OP เพื่อชี้ว่า)
sort -h
หรืออาจเป็น 1 ข้อบกพร่องและข้อ จำกัด การออกแบบที่ไม่สามารถแก้ไขได้ 1 รายการ 1)us
หรือµs
จัดการไม่ถูกต้อง (ข้อผิดพลาด) 2)s
ไม่ได้รับการจัดการอย่างเหมาะสม (ข้อ จำกัด ในการออกแบบที่เป็นไปได้) ถ้าคุณแปลงs
ไปยังหน่วยอื่นที่ทำงานอย่างถูกต้อง (m
,k
,M
)sort -h
ทำให้ถูกต้อง ลองด้วยmg/kg/Mg
ค่า!)