首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AWK做一个简单的减法并找出它的最小值

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

Stack Overflow用户
提问于 2017-10-18 13:51:14
回答 1查看 121关注 0票数 1

我有这个矩阵:

代码语言:javascript
运行
复制
{{1,4},{6,8}}

我想从第一个值中减去第二个值,例如: 4-1和8-6,然后将两者进行比较,并显示两者的最小值,在本例中: 8-6=2

所有这一切都是在终端中使用AWK

EN

回答 1

Stack Overflow用户

发布于 2017-10-18 16:47:38

你似乎有点困惑,不知道是从第二个减去第一个,还是从第一个减去第二个。另外,关于您的数据是在文件中还是在变量中。然而,这应该会让你开始...

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

代码语言:javascript
运行
复制
echo "{{1,4},{6,8}}" | awk '{gsub(/[{},]/," "); print}'
1 4   6 8 

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

代码语言:javascript
运行
复制
echo "{{1,4},{6,8}}" | awk '{gsub(/[{},]/," "); x=$2-$1; y=$4-$3; if(x<y)print x; else print y}'
2

作为@3161993在评论中建议的更优雅的替代方案,您可以将字段分隔符设置为一个或多个左或右大括号或逗号,如下所示:

代码语言:javascript
运行
复制
awk -F '[,{}]+' '{x=$3-$2; y=$5-$4; if(x<y) print x; else print y}' <<< "{{1,4},{6,8}}"
2

而且,正如@EdMorton友好地指出的那样,使用像这样的三元运算符可以让它变得更简洁:

代码语言:javascript
运行
复制
awk -F '[,{}]+' '{x=$3-$2; y=$5-$4; print (x<y ? x : y)}' <<< "{{1,4},{6,8}}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46803594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档