負の数と正の数の丸め

負の数と正の数の丸め

awkコマンドを使用して、次の数字を最も近い整数に丸め、それを別の列(たとえばcol11やcol12)にコピーしたいと思います。誰が助けることができますか

例えば1)

column5,column6,,,,,column11,column12,
     -21733.3, -4129.327,,,,,,,

期待される出力

 column5,column6,,,,,column11,column12,
-21733.3, -4129.327,,,,,-21733,-4129,
column5,column6,,,,,column11,column12,
      21733.3,4129.327,,,,,,,

期待される出力

 column5,column6,,,,,column11,column12,
21733.3,4129.327,,,,,21733,4129,

答え1

改行や引用符の中に文字列フィールドがない単純なCSVの場合は、次のようにすること,ができますawk

awk -F, -v OFS=, '
  NR > 1 {
    $11 = sprintf("%.0f", $5)
    $12 = sprintf("%.0f", $6)
  }
  {print}' < your-file

NR > 1ヘッダー行ではなく2番目から始まるレコードにのみ適用されます)

sprintf("%.0f")int()小数部を切り取り、最も近い値に丸めます。

を使用しmlr、列名を使用し、より複雑なCSVを処理します(ただし、CSV形式にはさまざまなバリエーションがあることに注意してください)。

mlr --csv put '$column11 = round(float(strip($column5)));
               $column12 = round(float(strip($column6)))' < your-file

周囲にスペースがある数字は次のように処理されます。ひもbymlrなので、stripping は別の結果を生成します。ひもこれらの空白がない場合は、次のように変換できます。編む、その後編むに渡されました round()

数字の周りにスペースがない場合は、次に十分です。

mlr --csv put '$column11 = round($column5);
               $column12 = round($column6)' < your-file

関連情報