열 1의 최대 값을 찾고 파일에서 열 2의 각 레코드를 인쇄하십시오. 값을 찾고 n 개의 레코드가 포함 된

열 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