열 1의 최대값을 찾고 파일에서 열 2의 해당 레코드를 인쇄합니다.

열 1의 최대값을 찾고 파일에서 열 2의 해당 레코드를 인쇄합니다.

열 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

답변1

이것은 작동합니다:

awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log

-v max=0변수가 로 설정된 max0각 행에 대해 첫 번째 필드가 현재 값과 비교됩니다 max. 더 큰 경우 max첫 번째 필드의 값으로 설정되고 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

답변2

이 작업을 수행하는 데 사용할 수 있습니다 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변수를 인쇄합니다.

답변3

awk '$1 > max { max = $1; output = $2 } END { print output }' version.log

답변4

sort명령을 사용하여 정렬하면 됩니다.

sort -r version.log | head -n1 | awk '{print $2}'

산출:

/opt/oracle/app/oracle/product/12.1.0

관련 정보