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

时间:2015-12-04 18:14:49

标签: awk

如果我有input

0
5
7
13

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

awk 'NR==1{x=$1;next}{print $1-x;x=$1}'

这将产生:

5
2
6

我的努力是,如果用于计算它的两个数字(来自+文件)包含来自input的值,我想在输出值旁边打印一个6-8符号。所以我会得到以下输出:

5 -
2 +
6 +

26旁边会有+个符号,因为这两个值(57以及7和{用于计算它们的{1}})包含13之间的值。

如果有必要澄清,请告诉我。

谢谢。

2 个答案:

答案 0 :(得分:3)

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

awk 'NR==1{x=$1;next}
          {sign = (x >= 6 && x <= 8) || ($1 >= 6 && $1 <= 8) ? "+" : "-"
           print $1-x" "sign;x=$1}' test

输出:

5 -
2 +
6 +

答案 1 :(得分:3)

与上述awk

相同的想法
$ 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范围之间。如果您希望将||改为&&

更新:范围检查应基于两个条目的范围,如注释中所述。这应该做:

$ 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}'