我有一个文件包含多行数据,如下所示。
$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
必需;
感谢您的支持
答案 0 :(得分:3)
您可以将awk
与printf
一起使用,如下所示:
$ 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