我有一個文件,其內容如下所示。
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