我有一个看起来像这样的文件:
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.......'
答案 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
我希望这有点帮助!