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