只保留小数部分的几位数字

只保留小数部分的几位数字

我有一个文件,其内容如下所示。

2,0,-1.8433679676403103,0.001474487996447893
3,1,0.873903837905657,0.6927701848899038
1,1,-1.700947426133768,1.5546514434152598

具有四列的 CSV,其中第三列和最后一列是浮点数。

我想去掉整个数字(包括符号)并只保留小数部分的前三位,这样上面的示例就会变成

2,0,843,001
3,1,873,692
1,1,700,554

我怎样才能做到这一点?

答案1

sed 's/-\{,1\}[0-9]*\.\([0-9]\{,3\}\)[0-9]*/\1/g' file

这会查找以可选数字开头的字符串,-后跟任意数量的数字,后跟句点,后跟任意数量的数字,从中选择前三个数字。

另一种方法是替换[0-9][[:digit:]]as

sed 's/-\{,1\}[[:digit:]]*\.\([[:digit:]]\{,3\}\)[[:digit:]]*/\1/g' file

答案2

使用awk

awk -F[,.] '{print $1","$2","substr($4,1,3)","substr($6,1,3)}' file

用于将值-F设置FS为逗号,和点.

substr将在点后打印所需的 3 位数字。

答案3

awk?为什么不是蟒蛇?

import csv
filename = <yourfilenamehere>

for line in list(csv.reader(open(filename, 'r'))):
    extra = [str(int((abs(float(num)) % 1) * 1000)).zfill(3) for num in line[2:]]
    print(*(line[:2] + extra), sep=',')

答案4

$ perl -lne 'print join " ", /\.\K(...)/g' file

相关内容