/で区切られた列の値を比較する方法

/で区切られた列の値を比較する方法

同じ列の値を比較したい/

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たとえば、2番目の区切り文字に基づいてフィールドを分割できます。

$ 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つの値を生成する場合。
  • 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

しかし、、この場合、実際にはsed2つの数値を抽出するために次を使用します。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  }}'

関連情報