สิ่งนี้น่าจะใช้ได้:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
-v max=0
ชุดตัวแปรmax
ไปแล้วสำหรับแต่ละบรรทัดฟิลด์แรกเมื่อเทียบกับมูลค่าปัจจุบันของ0
max
หากมีค่ามากกว่าให้max
ตั้งค่าเป็นฟิลด์ 1 และwant
ตั้งค่าเป็นบรรทัดปัจจุบัน เมื่อโปรแกรมประมวลผลไฟล์ทั้งหมดค่าปัจจุบันของwant
จะถูกพิมพ์
แก้ไข
ฉันไม่ได้ทดสอบawk
วิธีแก้ปัญหาก่อนหน้านี้และมันก็แย่มากที่ฉันจะให้มัน อย่างไรก็ตามรุ่นที่แก้ไขของคำตอบควรทำงาน (ขอบคุณ terdon สำหรับการแก้ไข) และฉันทดสอบด้านล่างเช่นกัน
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
ฉันกำลังเข้าไปsort
ในสนามแรกที่
- -n ระบุการเรียงลำดับตัวเลข
- -r ระบุย้อนกลับผลการจัดเรียง
- -k1,1 ระบุฟิลด์แรกสำหรับการเรียงลำดับที่จะเกิดขึ้น
ทีนี้หลังจากการเรียงลำดับฉันกำลังไพพ์เอาต์พุตและเพิ่งได้รับผลลัพธ์แรกซึ่งจะให้ค่าคอลัมน์ที่ 1 สูงสุดในผลลัพธ์
ตอนนี้ฉันก็ไปป์cut
กับตัวคั่นที่ระบุเป็นช่องว่างและการพิมพ์-f3
ซึ่งเป็นผลลัพธ์ที่ต้องการ
การทดสอบ
cat filename
112030 /opt/oracle/app/oracle/product/11.2.0
121010 /opt/oracle/app/oracle/product/12.1.0
2312 /hello/some/other/path
3423232 /this/is/really/big/number
342 /ok/not/the/maximum/number
9999899 /Max/number
9767 /average/number
ตอนนี้หลังจากที่ฉันเรียกใช้คำสั่งข้างต้นสำหรับการป้อนข้อมูลข้างต้นฉันได้รับผลลัพธ์ที่
/Max/number