首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定两个值之间的差异是否在awk的范围内?

如何确定两个值之间的差异是否在awk的范围内?
EN

Stack Overflow用户
提问于 2015-12-04 18:14:48
回答 2查看 150关注 0票数 1

如果我有input

代码语言:javascript
运行
复制
0
5
7
13

我想要计算每个后续行的值之间的差异。我这样做是因为:

代码语言:javascript
运行
复制
awk 'NR==1{x=$1;next}{print $1-x;x=$1}'

这将产生:

代码语言:javascript
运行
复制
5
2
6

我的奋斗之处在于,如果用于计算输出值的两个数字(从+文件中)包含来自6-8的值,则我希望在输出值旁边打印一个6-8符号。因此,我将得到以下输出:

代码语言:javascript
运行
复制
5 -
2 +
6 +

26旁边将有一个+符号,因为用于计算它们的两个值(57以及713)包含6-8之间的值。

如果需要澄清,请告诉我。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-04 19:34:51

与上面的awk相同的想法

代码语言:javascript
运行
复制
$ awk 'NR==1{p=$1;next} 
            {print $1-p, 
             ((p-6)*(p-8)<=0 || ($1-6)*($1-8)<=0)?"+":"-"; p=$1}' file

5 -
2 +
6 +

ps。这将检查是否至少有一个值在6,8范围内。如果希望两者都更改||&&

更新:范围检查应该基于注释中解释的两个条目的范围。这应该可以做到:

代码语言:javascript
运行
复制
$ awk 'function max(x,y) {return x>y?x:y}; 
       function min(x,y) {return x>y?y:x}; 
       NR==1{p=$1;next} {print $1-p,
               (max($1,p)<6 || min($1,p)>8)?"-":"+"; p=$1}'
票数 3
EN

Stack Overflow用户

发布于 2015-12-04 18:46:22

如果我正确理解你的话,你只需要一些额外的检查:

代码语言:javascript
运行
复制
awk 'NR==1{x=$1;next}
          {sign = (x >= 6 && x <= 8) || ($1 >= 6 && $1 <= 8) ? "+" : "-"
           print $1-x" "sign;x=$1}' test

输出:

代码语言:javascript
运行
复制
5 -
2 +
6 +
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34094809

复制
相关文章

相似问题

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