我有一个具有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之类的列。但是字段分隔符(逗号)也是上面字符串的一部分,所以我不确定如何获取正确的列
答案 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。