使用awk减去值直到给定范围

时间:2014-11-05 11:35:12

标签: awk

我有一个看起来像这样的文件:

54.0874 -326.094
56.8374 1241.89
57.5374 1644.74

第二个值以度为单位,我想在awk中减去360,只要该值在-360和0之间。

我正在寻找的输出是:

54.0874 -326.094
56.8374 -198.11
57.5374 -155.26

我正在调查awk while循环,但无法找到有用的解决方案。

我唯一需要做的就是使用if语句,但我想要一个适用于所有情况的解决方案。

awk '{if($2<=0.0) { print $1, $2 } else if($2>=0.0) { print $1, $2-360 }} else if.......'

2 个答案:

答案 0 :(得分:3)

当列大于while时,您可以使用0循环来减去:

awk '{while ($2>0) $2-=360}1' file

对于您的给定文件,它返回:

54.0874 -326.094
56.8374 -198.11
57.5374 -155.26

答案 1 :(得分:2)

我认为有一种更简单的方法可以在循环中没有减去。另一方面,如果度数值小于(或等于?)到-360,则它不起作用。这是一个更简单的解决方案:

awk '{n=$2/360; if((n=n-int(n))>0) --n; print $1, 360*n}' inputfile

或更短的版本(着名的'1'和Jidder的简化版)

awk '($2-=int($2/360)*360)>0{$2-=360}1' inputfile

计算度数的余数部分,然后转换为(-360,0)区间。

输入文件:

54.0874 -326.094
56.8374 1241.89
57.5374 1644.74
57.9999 -700.11
57.9999 360
57.9999 -360

输出:

54.0874 -326.094
56.8374 -198.11
57.5374 -155.26
57.9999 -340.11
57.9999 0
57.9999 0

我希望这有点帮助!