0

我有这样的标题的 CSV 文件

MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,ppp,qqq,rrr

我想要设置为具有空标题的列的列pppqqq(我不想删除它们!)所以我想要一个带有如下标题的生成 CSV:

MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,,,

(注意最后是空的,但存在的列。)

有没有办法用米勒做到这一点?(*)我试过了

mlr --csv rename -r '"^(.){3}$",' myFile.csv

但是这个命令将所有匹配的列折叠成一个!:-(


(*) 我确实知道如何将其与 中的搜索替换命令一起破解sed,但我不喜欢将其作为一般解决方案,因为sed不知道 CSV 的列结构。因此,我希望与米勒一起解决问题。

4

1 回答 1

3

如果我理解正确,只需删除空列

mlr --csv remove-empty-columns input.csv >output.csv

如果要使用重命名,命令是

mlr --csv rename -r '^.{3}$,' input.csv >output.csv

请注意,在 Miller 中,您不能拥有包含两个或多个同名字段的 CSV。如果你有

MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,,,

最后一个字段具有相同的空字段名称。然后您可以添加一个数字渐进式标题,然后对第一个数据行应用搜索和替换,最后删除数字标题。

从...开始

field1,field2,ppp,qqq,zzz
1,2,,,
4,7,,,

并运行

mlr --csv -N put -S 'if(NR==1){for (k in $*) {$[k] = gsub($[k], "^.{3}$", "");}}' input.csv

你将会有

field1,field2,,,
1,2,,,
4,7,,,

几点:

  • -N添加和删​​除数字标题;
  • if(NR==1)仅将 put 动词应用于此处的第一个数据行field1,field2,ppp,qqq,zzz
于 2021-07-20T08:51:50.127 回答