[英]Is it possible to rename multiple columns of a CSV to empty columns name when using miller?
我有帶有這樣標題的 CSV 文件
MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,ppp,qqq,rrr
我想將ppp
、 qqq
等列設置為帶有空標題的列。 (我不想刪除它們!)所以我想要一個帶有這樣標題的結果 CSV:
MyFirstCol,MySecondCol,MyThirdCol,.....MyLastRealCol,,,
(注意最后是空的但存在的列。)
有沒有辦法用米勒做到這一點?(*)我試過了
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
第一個數據行
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.