В компании ABC ведется неконтролируемый процесс создания учетных записей сотрудников.
В настоящее время Процесс означает добавление имен, адресов электронной почты и других личных данных
вручную в файл account.csv без каких-либо правил. Руководитель отдела
решил улучшить его на основе реализации соглашения об именах
. Хорошая идея для новичков, но что делать со списком текущих
пользователей? Вас попросили помочь. Не могли бы вы разработать
автоматический способ (скрипт bash) и создать новый файл account_new.csv на основе
текущего файла account.csv и ниже.
Необходимо обновить имя столбца . Формат имени: первая буква имени/фамилии
прописная, все остальные буквы строчные.
Необходимо обновить столбец электронной почты, указав домен @abc. Формат электронной почты: первая
буква имени и полной фамилии, строчная. Равные электронные письма должны
содержать location_id.
Скрипты должны иметь имя Task1.sh. Путь к файлу account.csv должен быть
аргументом сценария.
Определение готового. Разработан скрипт bash, который автоматически создает
accounts_new.csv и обновляет имя столбца и адрес электронной почты в соответствии с правилами
выше.
Мой скрипт (Я пытался использовать awk, извините, я в этом плох)
Код: Выделить всё
path=$(dirname "$1")
declare -A emailCount
declare -A emailLocation
awk '
BEGIN {
FS = OFS = ","
}
NR == 1 {
print $0
next
}
{
split(tolower($3), nameParts, " ")
firstLetter = substr(nameParts[1], 1, 1)
surname = nameParts[length(nameParts)]
baseEmail = firstLetter surname "@abc.com"
emailCount[baseEmail]++
}
' "$1" > "$path/temp.csv"
awk '
BEGIN {
FS = OFS = ","
}
NR == 1 {
print $0
next
}
{
split(tolower($3), nameParts, " ")
firstLetter = substr(nameParts[1], 1, 1)
surname = nameParts[length(nameParts)]
baseEmail = firstLetter surname "@abc.com"
if (emailCount[baseEmail] > 1) {
if (!(baseEmail in emailLocation)) {
emailLocation[baseEmail] = 1
} else {
emailLocation[baseEmail]++
}
email = baseEmail
sub("@", emailLocation[baseEmail] "@", email)
} else {
email = baseEmail
}
$5 = email
print $0
}
' "$path/temp.csv" > "$path/accounts_new.csv"
rm "$path/temp.csv"
echo "New file is done: $path/accounts_new.csv"
Право содержит еще 33 элемента, первый дополнительный элемент : '1,1,Сьюзан
Хьюстон, директор по обслуживанию,shouston1@abc.com,\n'
Это автотесты на сайт с заданием.
Пример (как это должно работать):
Код: Выделить всё
./task1.sh accounts.csv
Код: Выделить всё
2,1,Chris Gonzalez,Director,,
8,6,Bart charlow,Executive Director,,
9,7,Bart Charlow,Executive Director,,
Код: Выделить всё
2,1,Chris Gonzalez,Director,cgonzalez@abc.com,
8,6,Bart Charlow,Executive Director,bcharlow6@abc.com,
9,7,Bart Charlow,Executive Director,bcharlow7@abc.com,
Код: Выделить всё
id location_id name title email department
1 1 Susan houston Director of Services
2 1 Christina Gonzalez Director...
Извините, если повторюсь. Я видел обсуждение этой задачи, но не нашел подобной проблемы.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -csv-issue
Мобильная версия