正则表达式 - 检查 [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
代码。简单的解释是,在主程序中使用 awk
的 split
函数拆分第二个字段并使用字段分隔符 /
将第二个字段拆分为名为 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
我正在尝试捕获 [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
代码。简单的解释是,在主程序中使用 awk
的 split
函数拆分第二个字段并使用字段分隔符 /
将第二个字段拆分为名为 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