Câu trả lời:
Điều này sẽ làm việc:
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
Biến -v max=0
đặt max
thành 0
, sau đó, cho mỗi dòng, trường đầu tiên được so sánh với giá trị hiện tại của max
. Nếu nó lớn hơn, max
được đặt thành giá trị của trường thứ 1 và want
được đặt thành dòng hiện tại. Khi chương trình đã xử lý toàn bộ tệp, giá trị hiện tại want
được in.
Biên tập
Tôi đã không kiểm tra awk
giải pháp trước đó và thực sự rất tệ khi cung cấp nó. Dù sao, phiên bản chỉnh sửa của câu trả lời sẽ hoạt động (Cảm ơn terdon vì đã sửa nó) và tôi cũng đã thử nghiệm dưới đây.
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
Tôi đang sort
ở trên lĩnh vực đầu tiên,
Bây giờ, sau khi sắp xếp, tôi sắp xếp đầu ra và chỉ nhận được kết quả đầu tiên sẽ cho tôi giá trị cao nhất của cột1 trong kết quả.
Bây giờ, cuối cùng tôi đã chuyển nó sang cut
dấu phân cách được chỉ định là khoảng trắng và in ra -f3
đó là đầu ra dự định.
Kiểm tra
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
Bây giờ, sau khi tôi chạy lệnh trên cho đầu vào như trên, tôi nhận được đầu ra là,
/Max/number
Bạn có thể làm điều đó với AWK
.
$ awk '{if(max<$1){max=$1;line=$2}}END{print line}' file
/opt/oracle/app/oracle/product/12.1.0
Ở đây cột đầu tiên của mỗi dòng được so sánh với biến max
(ban đầu là 0). Nếu cột đầu tiên có giá trị lớn max
thì cột thứ hai được lưu trong biến line
, điều này sẽ tiếp tục cho mỗi và mọi dòng của tệp.
Ở cuối END
quy tắc tập tin được thực hiện để in line
biến.
awk '$1 > max { max = $1; output = $2 } END { print output }' version.log
sort -k1 -n filename | tail -1 | awk '{print $2}'
Đơn giản là bạn có thể sắp xếp nó bằng cách sử dụng sort
lệnh
sort -r version.log | head -n1 | awk '{print $2}'
Đầu ra:
/opt/oracle/app/oracle/product/12.1.0
cat
, sắp xếp có thể lấy các tệp đầu vào trực tiếp.
sort -nrk1,1 version.log | head -1 |awk '{print $2}’