AWK做一个简单的减法并找到它的最小值

时间:2017-10-18 05:51:14

标签: linux awk

我有这个矩阵:

{{1,4},{6,8}}

我希望从第一个值中减去第二个值,如:4-1和8-6 然后,比较两者并显示两者的最小值,在这种情况下:8-6 = 2

所有这些都使用终端中的AWK

1 个答案:

答案 0 :(得分:2)

您是否想要从第一个中减去第一个或从第一个中减去第二个,您似乎有点困惑。此外,关于您的数据是在文件还是变量中。但是,这应该让你开始......

如果我们用空格替换任何疯狂的大括号或逗号:

echo "{{1,4},{6,8}}" | awk '{gsub(/[{},]/," "); print}'
1 4   6 8 

现在,我们可以$1$4访问这些字段并执行您想要的操作:

echo "{{1,4},{6,8}}" | awk '{gsub(/[{},]/," "); x=$2-$1; y=$4-$3; if(x<y)print x; else print y}'
2

作为一个,或许更优雅,备注建议@ 3161993,您可以将字段分隔符设置为一个或多个打开或关闭大括号或逗号,如下所示:

awk -F '[,{}]+' '{x=$3-$2; y=$5-$4; if(x<y) print x; else print y}' <<< "{{1,4},{6,8}}"
2

正如@EdMorton所指出的那样,对于像这样的三元运算符,它可以更简洁:

awk -F '[,{}]+' '{x=$3-$2; y=$5-$4; print (x<y ? x : y)}' <<< "{{1,4},{6,8}}"