使用 miller 时是否可以将 CSV 的多列重命名为空列名称?
Is it possible to rename multiple columns of a CSV to empty columns name when using miller?
我有 header 这样的 CSV 文件
MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,ppp,qqq,rrr
列 ppp
、qqq
等我想设置为空 header 的列。 (我不想删除它们!)所以我想要一个带有 header 的结果 CSV,如下所示:
MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,,,
(请注意末尾的空列。)
有没有办法用 miller 做到这一点?(*) 我试过了
mlr --csv rename -r '"^(.){3}$",' myFile.csv
但是这个命令将所有匹配的列折叠成一个! :-(
(*) 我确实知道如何将其与 sed
中的 search-replace 命令一起破解,但我不喜欢将其作为通用解决方案,因为 sed
是不知道 CSV 的列结构。因此,我希望与米勒一起解决。
如果我没理解错的话,把空栏去掉就行了
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
的第一个数据行
我有 header 这样的 CSV 文件
MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,ppp,qqq,rrr
列 ppp
、qqq
等我想设置为空 header 的列。 (我不想删除它们!)所以我想要一个带有 header 的结果 CSV,如下所示:
MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,,,
(请注意末尾的空列。)
有没有办法用 miller 做到这一点?(*) 我试过了
mlr --csv rename -r '"^(.){3}$",' myFile.csv
但是这个命令将所有匹配的列折叠成一个! :-(
(*) 我确实知道如何将其与 sed
中的 search-replace 命令一起破解,但我不喜欢将其作为通用解决方案,因为 sed
是不知道 CSV 的列结构。因此,我希望与米勒一起解决。
如果我没理解错的话,把空栏去掉就行了
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
的第一个数据行