文本处理csv文件,截断数字而不取整

时间:2019-02-13 21:39:16

标签: csv text truncate

我有一个具有1000行和75个列的csv文件。这些列具有不同的数据类型。我想访问一些列(例如列46、47,并在小数点后截断为6位而不四舍五入)和一些列(例如列6截为小数点后的2位)。另外,将旧文件以及新更改另存为.csv文件。

这是一些伪数据(1行,6列)。第一行包含列名。

col1,col2,col3,col4,col5,col6

id_1,41.76149291933553,-70.06372272425352,美国,“ [,]”,0.1333534322353434

问题-有些列包含字符串“ [,]”。我知道使用awk,我们可以访问$ 46,$ 47之类的列。但是字段分隔符(逗号)也是上面字符串的一部分,所以我不确定如何获取正确的列

1 个答案:

答案 0 :(得分:0)

开始
col1,col2,col3,col4,col5,col6
id_1,41.76149291933553,-70.06372272425352,United States,"[, ]",0.1333534322353434

使用Miller(http://johnkerl.org/miller/doc/index.html),您可以运行

mlr --csv --fs "," cut -f col3,col4,col6 \
then put -S '$col3=gsub($col3,"(\.)([0-9]{3})([0-9]*)","\1\2");$col6=gsub($col6,"(\.)([0-9]{5})([0-9]*)","\1\2")' input

拥有

col3,col4,col6
-70.063,United States,0.13335

使用cut仅提取col3,col4,col6列。

并在示例中使用$col3=gsub($col3,"(\.)([0-9]{3})([0-9]*)","\1\2")$col3截断为3个数字。而是col6被截断为5。