文本处理csv文件,截断数字而不进行舍入

问题描述 投票:-1回答:1

我有一个1000行和75列的csv文件。列具有不同的数据类型。我想访问一些cols(ex cols 46,47并在十进制后截断到6位数而不进行舍入)和一些col(ex col 6截断到十进制后的2位数)。此外,将旧文件与新更改一起保存为.csv文件。

这是一些虚拟数据(有1行,6列)。第一行由列名称组成。

COL1,COL2,COL3,COL4,COL5,COL6

id_1,41.76149291933553,-70.06372272425352,United States,“[,]”,0.1333534322353434

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

csv text truncate
1个回答
0
投票

从...开始

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

与米勒(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。

© www.soinside.com 2019 - 2024. All rights reserved.