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