2

我有一个带有以下语法的管道分隔文件:

|ID Number|First Name|Middle Name|Last Name|#, Street, City|etc..

有些记录很乱,我想将字符串转换为标题大小写。基于关于将字符串转换为标题大小写的其他问题,我发现了这个命令:

awk  'BEGIN { FS=OFS="|" } {for (i=1; i<=NF; ++i) { $i=toupper(substr($i,1,1)) tolower(substr($i,2)); } print }'

运行它会产生|Id number|First name|Middle name|Last name|#, street, city|,它将第一个字母大写,但由于我有FS="|",每个字段中的字符串都被视为一个单词。

我希望每个字段中的所有内容都以标题大小写,而不仅仅是每个字段的第一个字母。

如果可能的话,我想为此提供一个仅 awk 的解决方案。

4

1 回答 1

3

尝试这样的事情:

awk  'BEGIN { FS=OFS="\0" }
      {n = split($0, words, /[ |]/, separators);
       out = separators[0];
       for (i=1; i<=n; ++i) {
           out = out toupper(substr(words[i],1,1)) tolower(substr(words[i],2)) separators[i];
       };
       print out separators[n+1]; }' file
于 2017-03-23T11:09:48.717 回答