正则表达式 - 检查 [x]/[y] y 是否大于 x

Regex - Checking if [x]/[y] y is greater than x

我正在尝试捕获 [x]/[y],如果 y 大于 x,则使用正则表达式模式。 输入在第二列 ($2)

示例输入:

NAME1 0/1
NAME2 0/2
NAME3 1/2
NAME4 1/3
NAME5 2/2
NAME6 1/1

输出:

NAME1 0/1
NAME2 0/2
NAME3 1/2
NAME4 1/3

使用 awk 的正确方法是什么?

到目前为止我已经完成了:

cat pods | grep -v Completed | awk -e ' ~ "[0-9]/[0-9]"'

我不确定如何继续或检查第二个 [0-9] 是否更大。

使用您显示的示例,请尝试以下 awk 代码。简单的解释是,在主程序中使用 awksplit 函数拆分第二个字段并使用字段分隔符 / 将第二个字段拆分为名为 arr 的数组,然后检查条件是否数组的第二个元素大于第一个元素,然后打印该行。

awk  '{split(,arr,"/")} arr[2]>arr[1]' Input_file

作为替代解决方案,还可以使用:

awk -F' |/' '>' Input_file

使用 / 作为字段分隔符 gnu awk 稍微短一点:

awk -F/ ' > gensub(/.* /, "", "1", )+0' file

NAME1 0/1
NAME1 0/2
NAME1 1/2
NAME1 1/3

如果要将模式与数字和正斜杠匹配,另一个选项使用 gnu awk 使用具有 2 个捕获组的模式,使用左侧的 ([0-9]+) 匹配 1 个或多个数字/

的右边

捕获组的值在数组 a 中,您可以使用它来比较组 2 和组 1。

awk 'match(, "^([0-9]+)/([0-9]+)$", a) {
  if(a[2]>a[1]) print
}' file

输出

NAME1 0/1
NAME2 0/2
NAME3 1/2
NAME4 1/3

使用 awk 您可以匹配模式,然后在正斜杠上拆分

awk ' ~ "^[0-9]+/[0-9]+$" {
  split(,a,"/")
  if(a[2]>a[1]) print
}' file