只保留小數部分的幾位數字

只保留小數部分的幾位數字

我有一個文件,其內容如下所示。

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

相關內容