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

如何确定两个值之间的差值是否在awk范围内?,awk,Awk,如果我有输入: 0 5 7 13 我想计算每个后续行的值之间的差值。我是这样做的: awk 'NR==1{x=$1;next}{print $1-x;x=$1}' 这将产生: 5 2 6 我的难题是,如果用于计算输出值的两个数字(来自输入文件)包含6-8中的值,我想在输出值旁边打印一个+符号。因此,我将得到以下输出: 5 - 2 + 6 + 2和6旁边将有一个+符号,因为用于计算它们的两个值(5和7和7和13)包含6-8之间的值 请让我知道,如果任何澄清是必要的 谢谢。如果我没弄错的话,

如果我有
输入

0
5
7
13
我想计算每个后续行的值之间的差值。我是这样做的:

awk 'NR==1{x=$1;next}{print $1-x;x=$1}'
这将产生:

5
2
6
我的难题是,如果用于计算输出值的两个数字(来自
输入
文件)包含
6-8
中的值,我想在输出值旁边打印一个
+
符号。因此,我将得到以下输出:

5 -
2 +
6 +
2
6
旁边将有一个
+
符号,因为用于计算它们的两个值(
5
7
7
13
)包含
6-8
之间的值

请让我知道,如果任何澄清是必要的


谢谢。

如果我没弄错的话,您只需要再检查一下:

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

如果我没有弄错的话,您只需要一些额外的检查:

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

与上述想法相同
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 +

与上述想法相同
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 +

非常感谢你!这确实有效。但是,如果我使用一组不同的值进行尝试:
041011
,我会得到以下输出:
4-6+1+
1
旁边应该有一个
-
,因为
10
11
不包含
6
8
。还有什么建议吗?我想打字错误是
x是的,我在上次比较中有点错误。我已经相应地编辑并更正了我的答案。很好。我喜欢这样写:
(6非常感谢!这确实有效。但是,如果我尝试使用不同的值集:
0 4 10 11
,我会得到以下输出:
4-6+1+
1
旁边应该有一个
-
,因为
10
11
不包含
6
8
。还有什么建议吗?我想知道nk打字错误是
x是的,我在上次比较中有一个小错误。我已经相应地编辑并更正了我的答案。很好。我喜欢这样写:
(6)谢谢你的回答!但是当我在值
041011
上运行时,我得到
4-6-1-
,我应该得到
4-6+1-
,因为
4
10
包含
6
8
。这里唯一的区别是
4
10
包含
6
ode>8
。我在使用@F.Knorr answer时得到了相同的结果。好吧,现在我明白你的意思了。查看更新。感谢你的回答!但是当我在值
0 4 10 11
上运行这个时,我得到了
4-6-1-
我应该得到的
4-6+1-
,因为
4
10
包含
6
>8
。这里唯一的区别是
4
10
包括
6
8
。使用@F.Knorr answer时,我得到了相同的结果。好的,现在我明白你的意思了。请参阅更新。