如果我有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 +
2
和6
旁边会有+
个符号,因为这两个值(5
和7
以及7
和{用于计算它们的{1}})包含13
之间的值。
如果有必要澄清,请告诉我。
谢谢。
答案 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}'