열 1에서 최대 값을 찾고 n 개의 레코드가 포함 된 파일에서 해당 경로 위치를 에코하는 방법
$ cat version.log
112030 /opt/oracle/app/oracle/product/11.2.0
121010 /opt/oracle/app/oracle/product/12.1.0
예상 출력 :
/opt/oracle/app/oracle/product/12.1.0
답변
이것은 작동해야합니다 :
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log
-v max=0
세트는 가변 max
하는 0
, 그리고, 라인마다, 제 필드의 현재 값과 비교된다 max
. 더 큰 경우 max
, 첫 번째 필드의 값으로 want
설정되고 현재 행으로 설정됩니다. 프로그램이 전체 파일을 처리하면 현재 값 want
이 인쇄됩니다.
편집하다
나는 awk
솔루션을 더 일찍 테스트하지 않았 으며 그것을 제공하는 것은 정말로 나빴다. 어쨌든 편집 된 버전의 답변이 작동해야하며 (고치 줘서 고맙습니다) 아래도 테스트했습니다.
sort -nrk1,1 filename | head -1 | cut -d ' ' -f3
나는 sort
첫 번째 분야에서 간다,
- -n은 숫자 정렬을 지정합니다.
- -r은 정렬 결과를 반대로 지정합니다.
- -k1,1은 정렬 할 첫 번째 필드를 지정합니다.
이제 정렬 후 출력을 파이핑하고 첫 번째 결과를 얻습니다. 결과에서 column1의 숫자가 가장 높은 값을 얻습니다.
이제 마지막 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
답변
당신은 그것을 할 수 있습니다 AWK
.
$ awk '{if(max<$1){max=$1;line=$2}}END{print line}' file
/opt/oracle/app/oracle/product/12.1.0
여기서 각 줄의 첫 번째 열은 변수 max
(처음 0) 와 비교됩니다 . 첫 번째 열에 큰 값이 있으면 max
두 번째 열이 변수에 저장되고 line
파일의 모든 줄마다 계속됩니다.
파일 END
규칙 의 끝 에서 line
변수 를 인쇄하기 위해 실행됩니다 .
답변
awk '$1 > max { max = $1; output = $2 } END { print output }' version.log
답변
sort -k1 -n filename | tail -1 | awk '{print $2}'
답변
간단히 sort
명령 을 사용하여 정렬 할 수 있습니다
sort -r version.log | head -n1 | awk '{print $2}'
산출:
/opt/oracle/app/oracle/product/12.1.0
답변
sort -nrk1,1 version.log | head -1 |awk '{print $2}’