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
なので、strip
ping は別の結果を生成します。ひもこれらの空白がない場合は、次のように変換できます。編む、その後編むに渡されました round()
。
数字の周りにスペースがない場合は、次に十分です。
mlr --csv put '$column11 = round($column5);
$column12 = round($column6)' < your-file