【发布时间】:2019-08-18 15:35:30
【问题描述】:
csv 文件中的第 12 列全部大写。有时该列有 3 个单词,但大多数情况下只有 1 个单词。
"one","two","three","four","five","six","seven","eight","nine","ten","eleven","TWELVE","thirteen"
我想将第四列转换为只有第一个字母大写
"one","two","three","four","five","six","seven","eight","nine","ten","eleven","Twelve","thirteen"
我可以把整列变成小写:
awk -F"," 'BEGIN{OFS=","} {$12 = tolower($12); print}' "$tmp_input3" > "$tmp_input4"
那个命令给了我:
"one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen"
如何使第12列的第一个字母为大写?
【问题讨论】:
-
toupper( substr( $12, 1, 1 ) ) substr( $12, 2 ) -
edit 你的问题包括minimal reproducible example 简洁、可测试的样本输入和预期输出。不仅包括晴天的情况(例如,包括首字母不是第一个字符的情况,例如
7foo bar)。如果不清楚,请参阅How to Ask。 -
@WiktorStribiżew 你能纠正我的语法吗?
awk -F"," 'BEGIN{OFS=","} {$12 = toupper( substr( $12, 1, 1 ) ) substr( $12, 2 ); print}' "$tmp_input4" > "$tmp_input5" -
我猜
"$tmp_input4"包含文件路径,"$tmp_input5"是新文件路径。 -
那么 - 没有第一个字符是非字母字符的字段 (
10 Downing St.)?没有包含逗号 ("foo, bar") 的字段?脚本可能不需要专门处理其他任何事情?真正想想您的真实数据并发布代表该数据的示例输入/输出 - 不要只是抛出一堆晴天单个小写单词,除非您输入的内容确实如此(从您之前的问题来看,它不是)。