我有这个矩阵:
{{1,4},{6,8}}
我想从第一个值中减去第二个值,比如4-1和8-6然后,比较两者,并显示两者的最小值,在这种情况下:8-6=2
所有这些都在终端中使用AWK
您似乎有点困惑是想从第二个中减去第一个还是从第一个中减去第二个。另外,关于数据是在文件中还是在变量中。然而,这应该让你开始。。。
如果我们用空格替换任何疯狂的大括号或逗号:
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}}"