我正在尝试将 .csv 文件第 11 列中的所有值都改为小写。我知道我可以使用“tr AZ az”,但如何确保它在我想要的文件中有效并且仅在第 11 列有效。
答案1
这取决于你的意思“.csv 文件”
在一般情况下(引用的 CSV 字段可能包含嵌入的分隔符,如"foo,bar",baz
),您将需要使用可以正确解析该字符的工具,例如 Perl / Python / Ruby 模块之一 - 或 Miller。
例如:
$ cat file.csv
ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE
然后
$ mlr --csv --implicit-csv-header --headerless-csv-output put '$11 = tolower($11)' file.csv
ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,eleven,TWELVE
为了简单的逗号分隔的字段,您可以使用 Awk 甚至 Sed:
$ awk -F, 'BEGIN{OFS=FS} {$11 = tolower($11)} {print}' file.csv
ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,eleven,TWELVE
$ sed -E 's/([^,]+)/\L\1/11' file.csv
ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,eleven,TWELVE