【问题标题】:Is it possible to rename multiple columns of a CSV to empty columns name when using miller?使用 miller 时是否可以将 CSV 的多个列重命名为空列名称?
【发布时间】:2021-09-26 22:41:31
【问题描述】:

我有这样的 CSV 文件

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

pppqqq 等列我想设置为具有空标题的列。 (我不想删除它们!)所以我想要一个带有这样标题的 CSV:

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

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

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

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

但是这个命令将所有匹配的列合并为一个! :-(


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

【问题讨论】:

    标签: csv rename columnheader miller


    【解决方案1】:

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

    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 的第一个数据行

    【讨论】:

    • 不,我不想删除空列。我想给(几乎)空的 col7mns 空标题,但保留所有三列,只使用空列名。
    • @halloleo 如果您看我的回答,也可以使用空列名。你测试过吗?
    • 我刚刚完全尝试了您的重命名命令,它将所有匹配的(空)列折叠成一个空列! - 但你的回答告诉我,我应该更清楚地说明我想保留空列。将编辑问题。
    • @halloleo 我再次编辑了我的答案。现在应该没问题了
    • 非常酷。正是我想要实现的目标。正如我所希望的那样复杂一点,但是通过数字标题的解决方法非常聪明!谢谢 aborruso!
    猜你喜欢
    • 2021-08-04
    • 2014-01-26
    • 2021-12-03
    • 2015-10-23
    • 2019-03-09
    • 2020-02-06
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多