AWK: конвертировать грязную запись в титульный регистр

У меня есть файл с разделителями трубы со следующим синтаксисом:

|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.

1 ответ

Попробуйте что-то вроде этого:

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
Другие вопросы по тегам