我有这个矩阵:
{{1,4},{6,8}}
我希望从第一个值中减去第二个值,如:4-1和8-6 然后,比较两者并显示两者的最小值,在这种情况下:8-6 = 2
所有这些都使用终端中的AWK
答案 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}}"