AWK ifループ - 値が1より小さい場合

AWK ifループ - 値が1より小さい場合

私は巨大なマルチカラム出力ファイルを生成し、角度集団のためのいくつかの分析ソフトウェアを実行しました。残念ながら、角度は-180°〜180°と定義されていますが、0°〜360°が必要です。

私がしたいのは、入力ファイル全体を取得し、各負の値を「360+値」の合計に置き換え、各正の値は変更せずに元の入力ファイルと同様に、タブ区切りの出力ファイルにすべてを印刷することです。

私は一度に1列ずつ処理しました。

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

私は、次のようにさらに「if」を含めることで、各列に対してこれを行うことができると思いました。

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}

関連情報