awk csv quoted字段需要大写每个单词

qlfbtfca  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(87)

如何使用awk来实现这一点。我需要双引号和点号字符串中的每个单词都大写...
示例如下:

8,7,martin sanders, Executive director,,
9,8,bred simons,"manager, second career services",,
10,9,Kely bricks,ceo,,
...

所需输出应为:

8,7,Martin Sanders, Executive Director,,
9,8,Bred Simons,"Manager, Second Career Services",,
10,9,Kely Bricks,Ceo,,

我运行这个代码:

awk -FS"\"" -v FPAT='([^, ]*)|(\"[^\"]+\")' '{OFS=","}{for (i=1; i<=NF; i++) {
        if (substr($i, 1, 1) == "\"") {
        len = length($i)
        $i = toupper(substr($i, 2,len - 2))""tolower(substr($i, 2, len))} {print $i} }}
    '
9,8,Bred Simons, "manager, Second Career Services",,

我试着使用FPAT,但我真的不明白它是如何工作的。但这还不够我意识到对于有经验的用户来说这是一个简单的问题,但是我对awk没有太多的经验。请帮
我看了解释here

wsxa1bj1

wsxa1bj11#

因为你有GNU awk,我假设你也有GNU sed,所以使用GNU sed for -E\w and \u

$ sed -E 's/(\w)(\w*)/\u\1\2/g' file
8,7,Martin Sanders, Executive Director,,
9,8,Bred Simons,"Manager, Second Career Services",,
10,9,Kely Bricks,Ceo,,

或者甚至只是(正如@sundeep在评论中指出的那样):

sed 's/\<\w/\u&/g' file
dohp0rv5

dohp0rv52#

将行中所有单词的第一个字母大写不是你想要的吗?

awk '{
    s = $0;
    while (match(s,/[[:alpha:]]+/)) {
        printf("%s", \
            substr(s,1,RSTART-1) \
            toupper(substr(s,RSTART,1)) \   
            substr(s,RSTART+1,RLENGTH-1) \
        )
        s = substr(s,RSTART+RLENGTH)
    }
    print s
}'
8,7,Martin Sanders, Executive Director,,
9,8,Bred Simons,"Manager, Second Career Services",,
10,9,Kely Bricks,Ceo,,

相关问题