
同じ列の値を比較したい/
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
しかし、、この場合、実際にはsed
2つの数値を抽出するために次を使用します。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 }}'