Скрипт Bash для автоматического создания проблемы csvLinux

Ответить
Anonymous
 Скрипт Bash для автоматического создания проблемы csv

Сообщение Anonymous »

У меня есть тестовое задание, и оно взрывает мне мозг.

В компании 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,
accounts.csv выглядит так:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»