Text-Processing

只保留幾位小數部分

  • June 3, 2019

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

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

我怎樣才能做到這一點?

使用awk

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

用於-FFS值設置為逗號,和點的位置.

substr將列印點後所需的 3 位數字。

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

引用自:https://unix.stackexchange.com/questions/521797