私は巨大なマルチカラム出力ファイルを生成し、角度集団のためのいくつかの分析ソフトウェアを実行しました。残念ながら、角度は-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}