AWK if 循环 - 如果任何值小于一

AWK if 循环 - 如果任何值小于一

我生成了一个巨大的多列输出文件,运行一些关于角度总体的分析软件。遗憾的是,角度定义为 -180° 到 180°,而我需要 0°-360°。

我想要做的是获取整个输入文件,并将每个负值替换为“360+值”的总和,同时保持每个正值不变,并将所有内容打印在制表符分隔的输出文件中,就像原始输入文件一样。

我设法一次简单地完成一列:

awk 'BEGIN {OFS="\t" }; { if($2 < 0) print $1, 360+$2; else print $1, $2}' INPUT > OUTPUT

我想我可以通过包含更多“如果”来为每一列执行此操作,如下所示:

awk 'BEGIN {OFS="\t" }; { if($2 < 0 || $3 < 0) print $1, 360+$2, 360+$3; else print $1, $2, $3}' INPUT > OUTPUT

或者类似的东西,但是必须有更好的方法来做到这一点。我尝试使用“ $0”,尽管我也无法让它工作。

那么,是否有一个很好的单行(或输入脚本)来检查每列中的每个值是否小于 0(负数),并按原样打印所有正值,同时将 360 添加到沿线的每个负值的:

awk 'BEGIN {OFS="\t" }; { if($0 < 0) print 360+$0; else print $0}' INPUT > OUTPUT

我确实明白这个命令不起作用,虽然基本上这就是我想要的,保持与输入相同的格式,如果值为负则添加 360 并打印,否则只打印。

预先感谢您,感谢您的所有意见。

答案1

您可以使用一个简单的for循环,例如

{for(i=1;i<=NF;i++){if($i < 0) $i+=360}; print}

相关内容