舍入到小数位并重新排列文件的列值

时间:2013-07-02 08:24:43

标签: bash decimal

我有一个文件包含多行数据,如下所示。

$cat out.txt

342000,0,6.768619883040936,5.834888120763486,12211.2329060592,14437.0
342001,1,7.768619883040937,6.834888120763487,12212.2329060593,14438.1
........
........

我需要重新格式化以下数据并更新相同的文件。

342000,0,6.769,5.835,12211,14437
342001,1,7.769,6.835,12212,14438

必需;

  1. 第3列值舍入到3位小数
  2. 第4列值舍入到3位小数
  3. 舍入第5列值的小数
  4. 舍入第6列值的小数
  5. 感谢您的支持

3 个答案:

答案 0 :(得分:3)

您可以将awkprintf一起使用,如下所示:

$ awk -F, '{printf("%d,%d,%.3f,%.3f,%.0f,%.0f\n",$1,$2,$3,$4,$5,$6)}' file
342000,0,6.769,5.835,12211,14437
342001,1,7.769,6.835,12212,14438

答案 1 :(得分:1)

如果你想在bash中完全这样做(printf是内置的),你可以这样做:

#!/bin/bash

IN=$1

(
    IFS=','
    while read line ; do
        set $line XXX
        if [ $1 != "XXX" ] ; then
            printf "%d,%d,%.3f,%.3f,%.0f,%.0f\n" "$1" "$2" "$3" "$4" "$5" "$6"
        fi
    done
) < $IN

答案 2 :(得分:1)

这可以简化,还要注意在正确的区域设置中设置小数分隔符。

export LANG=C

你可以做这样的事情(知道你输入的格式是固定的)

IFS=","
while read line;do printf "%d,%d,%.3f,%.3f,%.0f,%.0f\n" $line ; done < out