awk を使用して編集したい数百のテキスト ファイルがあります。その例は
5483.39 5134.64 4602.88 3953.89 3271.87 2495.87 1788.98 1285.57 1034.09 1196.25 1851.03 2874.14 3797.68 4361.26 4717.09 4829.74 4760.26 4758.12 4790.80 4763.77 4734.56 3311.89 -811.57 -6152.48
次のアルゴリズムを使用して編集したいと思います。最後の値 (この場合) から始めて、-6152.48
カウント数がフィールド 1 の 85% 未満かどうかを確認したいと思います。これが true の場合、このフィールド値を $1 の値にリセットします。次に、$(NF-1) などについて繰り返します。ただし、この 85% 条件が満たされないフィールド値に初めて遭遇したとき (つまり、$i > 0.85*$1)、ループをエスケープしてすべてを終了したいと思います。他のフィールドはそのまま。
これを行うには、各フィールド値をスキャンする foreach ループと、条件をチェックする while ループが必要だと思います。これが私がこれまでに持っているものです
awk 'BEGIN{flag=0} {for(i=1;i<=NF;i++) a[i] = $i/$1} {for(i=NF;i>=1;i--) print a[i],flag}' file
awk を使用して必要なロジックを実装する方法がわかりません。つまり、何らかの条件 if ($i > 0.85 * $1) flag = 1; 次に、上記の for ループをエスケープします。
おそらく、for ループと while ループは必要ありません。
何か案は?