如何确定两个值之间的差值是否在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时,我得到了相同的结果。好的,现在我明白你的意思了。请参阅更新。