/로 구분된 열의 ​​값을 비교하는 방법

/로 구분된 열의 ​​값을 비교하는 방법

같은 컬럼의 값을 비교하고 싶어요/

session-manager-0    3/5    1 >>> want to compare second column value 3 and 5 using awk.
session-manager-1    5/5    1
session-manager-2    5/5    1

답변1

split예를 들어 두 번째 구분 기호를 기준으로 필드를 분할 할 수 있습니다 .

$ awk 'split($2,a,"/") > 1 && a[2] > a[1]+0' file
session-manager-0    3/5    1 >>> want to compare second column value 3 and 5 using awk.
  • split적어도 2개의 값을 생성하는 경우 ;
  • 두 번째 분할 값이 첫 번째 분할 값보다 큽니다(강제 수치 비교 후).
  • 그런 다음 기본 print규칙을 적용합니다.

답변2

$ awk -F'[[:space:]/]+' '$2 < $3' file
session-manager-0    3/5    1 >>> want to compare second column value 3 and 5 using awk.

답변3

only를 사용하면 awk여러 일치 항목을 관리해야 합니다(에서 수행할 수 있는 작업과 다소 유사).이 게시물).

내 순수한 awk솔루션은 다음과 같습니다.

awk '{
  match($0, /[0-9]+\/[0-9]+/);                      # match number/number pattern
  pattern=substr($0,RSTART, RLENGTH);               # store match in $pattern
  match(pattern, /[0-9]+/);                         # match first number
  num1=substr(pattern,RSTART,RLENGTH);              # store it in $num1
  sub(/[0-9]+\//,"",pattern);                       # remove 'number/' from $pattern
  match(pattern, /[0-9]+/);                         # match second number
  num2=substr(pattern,RSTART,RLENGTH);              # store it in $num2
  if ($num1 > $num2){ print num1, ">", num2 }       # do your comparisons
  else if ($num1 < $num2) { print num1, "<", num2 } # as you please
  else { print num1, "=", num2  }                   # (this is just an example)
  }' file

하지만, 이 경우 실제로 다음을 사용하여 sed두 개의 숫자 값을 추출 합니다.awk

sed 's@^.*\([0-9]\+\)\/\([0-9]\+\).*$@\1 \2@' file |
  awk '{if ($1 > $2){ print $1, ">", $2 }
        else if ($1 < $2) { print $1, "<", $2 }
        else { print $1, "=", $2  }}'

관련 정보